如何将文本的特定行写入新文件?

时间:2013-12-09 19:53:10

标签: python text for-loop edit

我有一个文本文件,我想从中找到特定的行并将它们写入新文件。文字看起来像这样:

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()

脚本运行,但我最终得到一个空的新文本文件。我无法理解我哪里出错了。

2 个答案:

答案 0 :(得分: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 z 时,我实际上包含列表而非索引的元素。 有关详细信息,请参阅this

答案 1 :(得分: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)