2010-07-23 62 views
2

我有两个文件。一个是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每次我试图和运行它(其归档备份),或者说“文本文件忙” 。请帮忙!提前致谢!

回答

1

取决于你有多少搜索词,并假设他们都是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,但我只是看着它,“你做错了。”

帮助程序类可快速在所有标准输入文件上编写循环。

fileinput是用于将文件作为命令行参数传递给你的程序,你不这样做。 open(filename, mode)是你如何在Python中打开文件。

对于(看起来)这么简单的东西,csv阅读器是过度杀毒,尽管如果你真的想用excel格式来写文件,可能值得使用。

+0

如果有任何方向涉及任何引用,csv模块非常方便... – bstpierre 2010-07-24 03:44:17

0

看来CSA.dat的删除发生,因为你在fileinput构造函数中说inplace = 1。