2012-12-30 120 views
2

我想從文本文件中讀取5000行左右的代碼,然後解析並將解析後的值存儲到另一個文本文件中。Python - 讀取,解析和寫回文件

但是,我只能對第一個967行(如輸出文件所示,其中僅包含第一個967行的解析值)執行此操作。

這裏是我寫這個簡單的代碼來完成這項工作。

infile = open("Input.txt", "r") 
outfile = open("Output.txt", "w") 
for line in infile.readline(): 
    temp = infile.readline() 
    value = temp.split("<_|_>") 
    outfile.write(value[1]) 

我該如何去編寫其他4000多個數值?

+3

您正在閱讀的兩行每次迭代只需使用。不要創建temp,只需使用line。 – sberry

+0

感謝您指出了這一點! –

回答

16

因爲您的for迭代不在infile的行中,而是在第一行中的字符上。第一行可能是967個字符。

for line in infile.readline()表示您正在將infile的第一行讀取爲字符串。字符串是可迭代的,迭代的方式遍歷字符串中的字符。因此,每次爲該行中的每個字符運行循環。

你想要做什麼是可能的,而,這樣的事情:在Python

with open("Input.txt", "r") as infile, open("Output.txt", "w") as outfile: 
    for line in infile: 
     outfile.write(line.split("<_|_>")[0]) 

文件對象也可迭代。遍歷它們遍歷每一行。你可以使用for line in infile.readlines()(注意:readlines,而不是readline),但是在迭代之前,它會將infile中的所有行讀入一個巨大的數組中。直接在文件對象上迭代只會一次將最新的讀取行保留在內存中。

+1

我只想做readlines()!神聖的一個小錯誤成爲驢子中的一大痛苦!謝謝@ Dolda2000用一個簡潔的解釋來澄清這一點,歡呼! –

+2

現在文件本身就是迭代器,幾乎不需要使用readlines()。使用這個答案的'in infile:'表格。另外,+1使用'with'。 – PaulMcG

-1

您應該閱讀每一行並進行解析。您正在輸入文件中的一行中執行for循環。一個簡單的方法是使用while循環

f1 = open('Input.txt','r') 
f2 = open('Output.txt','w') 
line = f1.readline() 
while line:  
    value = line.split('<_|_>') 
    f2.write(value[0]) 
    line = f1.readline() 
0

爲什麼不能我們

f1 = open('Input.txt','r') 
f2 = open('Output.txt','w') 

for i in f1: 
f2.writelines(i) 

f2.close() 
+0

因爲OP不想簡單地將一個文件複製到另一個文件。 – Dolda2000