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