文件中的python for循环修改行每隔一行跳过

时间:2016-06-02 21:40:22

标签: python file for-loop duplicates

我的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()

现在它会跳过阅读文件中的每一行,并仅为输入的一半提供结果。我通过复制每一行用正则表达式解决了它,但是有没有更好的解决方案呢?

5 个答案:

答案 0 :(得分:3)

不要同时使用RewriteEngine On RewriteCond %{HTTP_HOST} ^(www.)?example.com$ RewriteRule ^(/)?$ example [L] for line in file。您的“缺失”行位于变量file.readline()中,您没有使用它。

line

答案 1 :(得分:2)

您的循环中不需要readline,只需使用当前行。 readline在文件迭代器上调用next,因此跳过循环中的当前行。

k = ast.literal_eval(line)

答案 2 :(得分:2)

你有{ "title": "mytitle", "edition": "1", "date": "2016-01-01" } ,它遍历文件中的行。然后在下一行代码中,for line in f读取文件中的 next 行。因此,您正在跳过文件中的每一行。

只需使用f.readline()而不是line

答案 3 :(得分:1)

你的问题在一开始就是正确的:

for line in f:
    k = ast.literal_eval(f.readline())

for 语句从生成器 f 中读取一行,并将其存储在变量中,您永远不会再使用它。然后你在循环中的第一个语句显式读取以下行并使用它。每次进行循环,都会重复此过程。

只需将这些更改为

即可
for k in f:

看看它是如何工作的。然后将 k 变量更改为,以便代码更具可读性。 : - )

for line in f:
    print (Polygon(ast.literal_eval(line)).centroid, file = g)

答案 4 :(得分:1)

您的代码有for line in f:f.readline()。所以你每循环读两行。

使用k = ast.literal_eval(line)