2015-12-12 3 views
1

поэтому у меня есть файл: data2.txtкак написать вывод в файл питон

Lollypop, 
Lolly pop, 
ooh 
lolly, 
lolly, lolly; 
lollypop, lollypop, 
ooh lolly, lolly, lolly, 
lollypop! 
ba dum dum dum ... 

LOL :-) 

мне нужно Перебери каждую строку data2.txt печати только строк, содержащей строку «лол» и печатать вывод в NewFile

with open("data3.txt") as g: 
    with open("data2.txt") as lfp: 
     for lin in lfp: 
      if 'lol' in lin: 
       g.write(str(lin)) 
      elif 'LOL' in lin: 
       g.write(str(lin)) 
      elif 'Lol' in lin: 
       g.write(str(lin)) 

Но я получаю сообщение об ошибке:

g.write(str(lin)) 
io.UnsupportedOperation: not writable 

ответ

5

Вам нужно открыть с w для ш riting:

with open("data3.txt","w") as g: 
    with open("data2.txt") as lfp: 

Вы также можете упростить:

with open("data3.txt", "w") as g, open("data2.txt") as lfp: 
     for lin in lfp: 
      if 'lol' in lin.lower(): 
       g.write(lin) 

Или используйте writelines:

with open("data3.txt", "w") as g, open("data2.txt") as lfp: 
     g.writelines(line for line in lfp if "lol" in line.lower()) 

line уже строка, так что вам не нужно вызывать str на нем, использование "lol" in line.lower() будет соответствовать всем вашим случаям.

Если вы явно искали "lol", "Lol", "LOL", any был бы более приятным.

with open("data3.txt", "w") as g, open("data2.txt") as lfp: 
    poss = ("lol", "Lol", "LOL") 
    g.writelines(line for line in lfp 
        if any(s in line for s in poss)) 

Все режимы описаны в docs

+1

не знал, что вы можете открыть два файла на одной строке, хороший ответ! – martijnn2008

+0

@ martijnn2008, да, вы можете открыть столько, сколько хотите, вы можете так с любыми объектами поддерживать использование контекстного менеджера –

0

Проблема находится в линии with open("data3.txt") as g:

Вы не предоставили open с режимом, и по умолчанию r, который предназначен только для чтения , Используйте with open("data3.txt", 'w') as g:, если вы хотите заменить файл, если он уже существует, или with open("data3.txt", 'a') as g:, если вы хотите добавить его в файл, если он уже существует.

+0

небольшая коррекция: 'r' для чтения –