2013-08-17 122 views
2

我需要逐行寫一個文本文件。此代碼逐行打印文本,但只有最後一行存儲在result.txt文件中。在Python中編寫一個文本文件,逐行寫入

import re 
import fileinput 
for line in fileinput.input("test.txt"): 
    new_str = re.sub('[^a-zA-Z0-9\n\.]'," ", line) 
    print new_str 
open('result.txt', 'w').write(new_str) 
+0

看起來像你想先打開文件(前環),然後通過循環(F =開放(寫在每個迭代數據吧......)......再後來˚F .write(new_str)) –

回答

5
  1. 我不知道你爲什麼需要文件輸入模塊,open也可以處理這種情況。

  2. 您的for循環遍歷所有行,覆蓋new_str與新行。最後一行沒有下一行,所以它不會被覆蓋,所以它是唯一被保存的行。

    import re 
    test_f = open('test.txt') 
    result_f = open('result.txt', 'a') 
    for line in test_f: 
        new_str = re.sub('[^a-zA-Z0-9\n\.]'," ", line) 
        result_f.write(new_str) 
    
    # also, this too, please: 
    test_f.close() 
    result_f.close() 
    
  3. 您應該使用with語句自動關閉您的文件,即使你的代碼崩潰。

    import re 
    with open('test.txt') as test_f, open('result.txt', 'w') as result_f: 
        for line in test_f: 
         new_str = re.sub('[^a-zA-Z0-9\n\.]'," ", line) 
         result_f.write(new_str) 
    
0

對於test.txt中的每一行,您都有print new_str。但是,您只能在循環之後寫入一行到文件。更改每次打印後寫入的代碼:

outf = open('result.txt', 'w') 
for line in fileinput.input("test.txt"): 
    new_str = re.sub('[^a-zA-Z0-9\n\.]'," ", line) 
    print new_str 
    outf.write(new_str + '\n') 
outf.close() 

會做你想做的。

+0

另一件需要注意的是're.sub'用''''替換'\ n' ...所以即使在'outf.write'處於正確的位置像一條大線... –

+0

@JonClements同意,cheezy修補補充說。 – msw

0

我假設你需要在文件的結尾(即追加)增加新線路

for line in fileinput.input("test.txt"): 
new_str = re.sub('[^a-zA-Z0-9\n\.]'," ", line) 
with open("f.txt", "a") as f: 
f.write(new_str) 

您可以使用f.write線和重複它,直到你寫的一切