2016-06-29 9 views
0

У меня есть текстовый файл с числовым значением в каждой строке, и я пытаюсь сконденсировать все значения на одну строку с пробелом между ними. Это то, что я до сих пор, но это не работает:Как вы превращаете несколько строк текста в файл в одну строку текста в python?

for line in f1: 
    line = line.rstrip('\n') 
    f2.write(line) 

f1.close() 
f2.close() 
+0

Просьба показать краткий пример ввода и желаемого вывода. Почему ваша процедура не работает? – wwii

ответ

0

Это будет делать:

with open("f1", "r") as f1: 
    with open("f2", "w") as f2: 
     f2.write(" ".join(map(lambda x: x.strip("\n"), f1.readlines()))) 

Возьмите все линии образуют f1, раздеть «\ п», присоединиться к ним с " " и написать, что string в новый файл.

+0

Не знаете, сможете ли вы писать на 'f2', открытые в режиме чтения. –

+0

@ap, true, только копия/вставка – Netwave

+0

не будет лучше просто использовать 'f2.write (" ".join (f1.readlines()))'? – rsm

3

Просто распечатайте их с пространством Inbetween:

... 

for i, line in enumerate(f1): 
    space = " " if i != 0 else "" 
    line = line.rstrip('\n') 
    f2.write(space + line) 

f1.close() 
f2.close() 

Если файлы не огромный (т.е. помещается в памяти), проще всего было бы:

with open("foo") as f1, open("bar", 'w') as f2: 
    f2.write(" ".join(line.rstrip('\n') for line in f1)) 
1

Если вы находитесь в Python 2.7+ или Python 3.x, и размер файла не является чрезмерным, возможно, вы можете сделать это в памяти:

with open(filename1, 'r') as fin, open(filename2, 'w+') as fout: 
    lines = fin.readlines() 
    cleaned = [line.strip() for line in lines] 
    joined = ' '.join(cleaned) 
    fout.write(joined)