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