python的遍历循环结构可以是文件吗_在python中循环遍历文本文件时出错

错误的原因是,您滥用文件对象生成器的方式是,两次调用next的频率都比您想的要高.每次对next的调用都会得到一行并返回.因此,虽然’—‘不在next(file)中:fields1 = next(file).split(‘,’)获取一行,检查它是否为—,然后获取另一行并尝试对其进行解析.这意味着您可以跳过包含—的行,方法是在第二行中出现它.在这种情况下,您将找到文件的末尾,然后再找到要查找的行. StopIteration是迭代器通常如何指示其输入已用尽的方式.

您可能还需要在代码中解决几个其他问题:

>如果您已经在for循环中,则在文件之类的生成器上使用next可能会导致未定义的行为.这次您可能会摆脱它,但这通常不是一个好习惯.顺便说一句,您之所以无法使用它的主要原因是,您可能永远不会在触发while时真正将控制返回到for循环,而不是在这方面文件不是特别允许的.

>内部结构将您的数据转储到文件中,同时位于while循环内部.这意味着您使用“ w”权限打开的文件将在while的每次迭代(即文件中的每一行)都被截断.随着数组的增长,输出实际上会看起来很好,但是您可能希望将其移出内部循环.

最简单的解决方案是在两个循环中重写代码:一个循环找到您关心的零件的开始,另一个循环处理直到找到结束.

像这样:

test_arr = []

with open(fileName, 'r') 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(',')

for item in fields1:

testarr.append({config.get('test','test'): item})

with open(test_dir,'w') as test_file:

json.dump(testarr, test_file)

编辑:

[email protected],[email protected]��为查找特定模式提供了极大的准确性和灵活性,但对于此示例而言,这确实是过高的.我想指出的是,如果您要查找除section1以外的其他部分,或者如果section1出现在其他一些带有破折号的行之后,则绝对需要这种两循环方法.其他答案中的单循环解决方案在非平凡的情况下将不起作用.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值