2013-08-17 3 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 = открытый (...) ... потом п .write (new_str)) –

ответ

5
  1. Я не знаю, зачем нужен модуль fileinput, open может обрабатывать этот случай.

  2. Ваша петля проходит через все линии и переопределяет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

У вас есть print new_str для каждой строки в test.txt. Но вы записываете только одну строку в файл после цикла. Изменение кода для записи после каждой печати:

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 fix. – 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 линию и повторить его, пока вы написать все

Смежные вопросы