2013-12-09 2 views
-1

У меня есть текстовый файл, из которого я хочу найти определенные строки и записать их в новый файл. текст выглядит примерно так:Как написать конкретные строки текста в новый файл?

1552311_a_at NA 6.548202118 6.795958567 6.525295817 6.467153775 
1552312_a_at NA 7.237622005 7.501887409 7.438287339 7.249551462 
1552334_at NA 5.36199913 5.554097857 5.296649894 5.64695338 

Я делал это раньше без особых проблем, но по какой-то причине он не будет работать для меня в данном случае. У меня есть список значений, которые я ищу в текстовом файле для извлечения.

import fileinput 

x = open('file', 'r') 
y = open('file_write', 'w') 
z = [...,...,...] #list of values to search for in file given by user 
def file_transform(filein,fileout,list): 
    for i in list: 
     for line in filein: 
      if list[i] in line: 
       fileout.write(line) 

file_transform(x,y,z) 

file.close() 
file_write.close() 

сценарий запускается, но в итоге я получаю пустой текстовый файл. Я не могу понять, где я ошибаюсь.

+1

что такое 'z' ?????? (вопросительные знаки из-за нижних границ для количества символов;)) – BartoszKP

+0

Переключатель «для i в списке:» и «для строки в файле:»? – PasteBT

ответ

3

Вы не можете цикл несколько раз тот же самый файл без «перематывать», также вы злоупотребляете для цикла в списке:

def file_transform(filein,fileout,z): 
    for i in z: 
     for line in filein: 
      if i in line: 
       fileout.write(line) 
     filein.seek(0) 

или, гораздо лучше:

def file_transform(filein,fileout,z): 
    for line in filein: 
     for i in z: 
      if i in line: 
       fileout.write(line) 

Когда вы делаете for i in zi фактически содержит элементы списка, а не индексы. Для получения дополнительной информации см. this.

+0

Спасибо, будет ли filein.seek (0) быть тем, о чем вы говорите? Или есть лучшие способы обойти это? Я понимаю, что мне нужно изучить, как лучше использовать итераторы и генераторы. – Tkanno

+0

Ops, вы правы, в python есть 'seek (0)', я запутался с C. Это один из немногих случаев, когда C более удобен, чем python: P. Ред. – smeso

0

list не является хорошим именем для любой переменной, так как list является объектным типом в python.

with open('file', 'r') as f: 
    x = f.readlines() # this auto closes the file after reading, which is better practice 

y = open('file_write', 'w') 

def file_transform(filein, fileout, z): 
    for line in filein: 
     for i in z: 
      if i in line: 
       fileout.write(line) 
Смежные вопросы