Skip to main content
 首页 » 编程设计

python之搜索文件并将搜索词所在的行保存到新文件中

2025年05月04日998°冷暖

我有两个文件。一个是 csv,包含搜索字符串(每行一个),另一个是一个巨大的文件,在每行的开头包含搜索词,但有额外的信息,我想在这些信息之后提取。

搜索词文件名为“search.csv”,如下所示:

3ksr 
 
3ky8 
 
2g5w 
 
2gou 

包含其他信息的文件名为“CSA.txt”,如下所示:

3ksr,INFO..... 
 
3ky8,INFO..... 
 
2g5w,INFO..... 
 
2gou,INFO..... 

但是,这是一个非常大的文件(超过 8mb),每个搜索词出现不止一次,但每次出现的信息都不同。我有一些示例代码:

import fileinput 
import csv 
 
csa = fileinput.input("CSA.dat", inplace=1) 
pdb = csv.reader(open("search.csv")) 
outfile = csv.writer(open("outfile.csv"), dielect = 'excel', delimiter = '\t') 
 
for id in pdb: 
    for line in csa: 
        if id in str(line): 
            outfile.writerow([id, line]) 
 
csa.close() 

但是,这段代码不起作用,每次我尝试运行它时似乎都删除了 CSA.dat(它在存档中备份),或者它说“文本文件忙”。请帮忙!提前致谢!

请您参考如下方法:

取决于您有多少个搜索词,并假设它们都是 4 个字符:

terms = open('search.csv').split(',') 
 
with open('CSV.dat', 'r') as f: 
   for line in f: 
       if line[:4] in terms: 
           #do something with line 
           print line 

如果它们不是 4 个字符,您可以执行 line[:line.find(',')] 它将返回第一个 ',',或者如果没有找到它将返回整行。

编辑: 我从未听说过 fileinput,但我只是看了看,然后“你做错了。”

Helper class to quickly write a loop over all standard input files.

fileinput 用于将文件作为命令行参数传递给您的程序,而您并没有这样做。 open(filename, mode) 是您在 Python 中打开文件的方式。

对于(看起来)如此简单的事情,csv 阅读器有点矫枉过正,但如果您真的想要 excel 格式的文件,它可能值得用来编写文件。