2013-12-09 51 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

切换“为我在列表中:”和“为线在filein:”? – 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实际上包含list not indexes的元素。 欲了解更多信息,请参阅this

+0

谢谢,将filein.seek(0)成为你指的是什么?还是有更好的方法来解决这个问题?我知道我需要研究如何更好地使用迭代器和生成器。 – Tkanno

+0

OPS,你是对的,在python中是'seek(0)',我和C混淆了。这是少数情况下C更方便的蟒蛇之一: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) 
相关问题