繁体   English   中英

python for loop修改文件中的每一行都会跳过第二行

[英]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 filefile.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 ffor 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM