簡體   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