2010-07-23 68 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。