[英]python for loop modify line in file skips every second line
我的for循环有问题,我已经在文档中阅读了为什么Python会通过修改迭代器而出现问题。 现在我有以下代码:
f = open('test.txt', 'r')
g = open('test1.txt', 'w')
for line in f:
k = ast.literal_eval(f.readline())
p = Polygon(k)
c = p.centroid
print (c, file = g)
f.close()
现在,它跳过读取文件中的每一行,并为我提供一半输入的结果。 我通过复制每行用正则表达式解决了这个问题,但是有没有更好的解决方案呢?
不要for line in file
和file.readline()
同时for line in file
。 您的“缺失”行在变量line
,您什么都没用。
with open('test.txt') as f, open('test1.txt', 'w') as g:
for line in f:
k = ast.literal_eval(line)
p = Polygon(k)
c = p.centroid
g.write('%s\n' % c)
你并不需要readline
在你的循环,只需使用当前行。 readline
在文件迭代器上调用next
,因此跳过了循环中的当前行。
k = ast.literal_eval(line)
for line in f
有for line in f
,它在文件中的各行之间进行迭代。 然后在下一行代码中,您将拥有f.readline()
来读取文件中的下一行。 因此,您将跳过文件中的所有其他行。
只需使用line
而不是f.readline()
。
您的问题从一开始就是正确的:
for line in f:
k = ast.literal_eval(f.readline())
for语句从生成器f中读取一行并将其存储在变量line中 ,您将不再使用它。 然后,循环中的第一条语句将显式读取以下行并进行处理。 每次您遍历循环时,都重复此过程。
只需更改这些内容即可阅读
for k in f:
并查看其工作原理。 然后将k变量更改为line ,这样代码更易读。 :-)
for line in f:
print (Polygon(ast.literal_eval(line)).centroid, file = g)
您的代码for line in f:
和f.readline()
有for line in f:
。 因此,每个循环读取两行。
使用k = ast.literal_eval(line)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.