2013-08-17 124 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线和重复它,直到你写的一切