错误的原因是,您滥用文件对象生成器的方式是,两次调用next的频率都比您想的要高.每次对next的调用都会得到一行并返回.因此,虽然’—‘不在next(file)中:fields1 = next(file).split(‘,’)获取一行,检查它是否为—,然后获取另一行并尝试对其进行解析.这意味着您可以跳过包含—的行,方法是在第二行中出现它.在这种情况下,您将找到文件的末尾,然后再找到要查找的行. StopIteration是迭代器通常如何指示其输入已用尽的方式.
您可能还需要在代码中解决几个其他问题:
>如果您已经在for循环中,则在文件之类的生成器上使用next可能会导致未定义的行为.这次您可能会摆脱它,但这通常不是一个好习惯.顺便说一句,您之所以无法使用它的主要原因是,您可能永远不会在触发while时真正将控制返回到for循环,而不是在这方面文件不是特别允许的.
>内部结构将您的数据转储到文件中,同时位于while循环内部.这意味着您使用“ w”权限打开的文件将在while的每次迭代(即文件中的每一行)都被截断.随着数组的增长,输出实际上会看起来很好,但是您可能希望将其移出内部循环.
最简单的解决方案是在两个循环中重写代码:一个循环找到您关心的零件的开始,另一个循环处理直到找到结束.
像这样:
test_arr = []
with open(fileName, ) as file:
for line in file:
if line.startswith(---) and section1 in line:
break
for line in file:
if --- in line:
break
fields1 = line.split(,)