2010-10-21 2 views
-1

Я пытаюсь написать код, который откроет List1.txt и скопирует содержимое до тех пор, пока не увидит строку 'John smith' до List2.txt.Копирование из файла до тех пор, пока не будет найдена определенная строка маркера

Это то, что я до сих пор:

F=open('C:\T\list.txt','r').readlines() 
B=open('C:\T\list2.txt','w') 
BB=open('C:\T\list2.txt','r').readlines() 
while BB.readlines() == 'John smith': 
    B.writelines(F) 

Вот пример того, что List1.txt может содержать: Тем не менее, кажется, не

Natly molar 
Jone rock 
marin seena 
shan lra 
John smith 
Barry Bloe 
Sara bloe` 

он будет работать. Что я делаю не так?

+2

для начала ваши пути неправильны. изменить \ на \\ или/ – bernie

+0

Вы открываете list2.txt для записи и сразу же открываете его для чтения? А потом вы читаете? Как это должно работать? Я бы ожидал, что вызов записи обрезает файл, чтобы для вашего цикла чтения ничего не было. – hughdbrown

ответ

1
F=open('C:\T\list1.txt','r') 
B=open('C:\T\list2.txt','w') 
for l in F: #for each line in list1.txt 
    if l.strip() == 'John Smith': #l includes newline, so strip it 
     break 
    B.write(l) 

F.close() 
B.close() 
3
from itertools import takewhile 

with open('List1.txt') as fin, open('List2.txt', 'w') as fout: 
    lines = takewhile(lambda x : x != 'John smith\n', fin) 
    fout.writelines(lines) 
+0

FYI, у вас есть опечатка: takewile –

+0

Хороший ответ, но я бы сказал, что с помощью itertools.takewhile() с лямбдой плюс два открывается в заявлении с довольно большим количеством выходов из OP, поскольку он имел помощь в своей домашней работе. – hughdbrown

+2

@hughdbrown: возможно, поэтому OP принял ответ jdizzle – SilentGhost

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

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