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

Python 如何将文本的特定行写入新文件?,python,text,for-loop,edit,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 我以前做过这

我有一个文本文件,我想从中找到特定的行并将它们写入一个新文件。文本如下所示:

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

脚本运行了,但我得到了一个空的新文本文件。我不明白我哪里出错了。

您不能在不“倒带”的情况下多次循环同一个文件,而且您正在错误地使用列表中的循环:

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)
当您对z中的i执行
操作时,i实际上包含列表的元素,而不是索引。

有关详细信息,请参见。

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)

什么是
z
??????(由于字符计数的下限而出现问号;)切换“for i in list:”和“for line in filein:”?谢谢,您指的是filein.seek(0)吗?还是有更好的方法来解决这个问题?我知道我需要研究如何更好地使用iterables和生成器。Ops,你说得对,在python is
seek(0)
中,我对C感到困惑。这是C比python更方便的少数情况之一:P.编辑。