2011-07-05 78 views
0

我有一個文本文件是製表符分隔的,我試圖弄清楚如何搜索文件中特定列中的值。用Python搜索特定列中的特定值

我想我需要使用csv導入,但到目前爲止一直沒有成功。有人能指引我朝着正確的方向嗎?

謝謝!

** **更新 感謝大家的更新。我知道我可以用awk來做這個,但是隻是爲了練習,我試圖用python來完成它。

我現在收到以下錯誤: 如果row.split(」「)[INT(searchcolumn)] == SEARCHQUERY: IndexError:列表索引超出範圍

這裏是的片斷我代碼:

#open the directory and find all the files 
for subdir, dirs, files in os.walk(rootdir): 
    for file in files: 
     f=open(file, 'r') 
     lines=f.readlines() 
     for line in lines: 
      #the first 4 lines of the file are crap, skip them 
      if linescounter > startfromline: 
       with open(file) as infile: 
        for row in infile: 
         if row.split(' ')[int(searchcolumn)] == searchquery: 
          rfile = open(resultsfile, 'a') 
          rfile.writelines(line) 
          rfile.write("\r\n") 
          print "Writing line -> " + line 
          resultscounter += 1 
     linescounter += 1 
     f.close() 

我正在把用戶的raw_input作爲raw_input的searchcolumn和searchquery。林猜測我現在得到列表超出範圍的原因,是因爲它不正確解析文件?

再次感謝。

+1

如果這不是一個更大的Python應用程序的一部分,你可能會發現這是'awk'所做的事情。 –

回答

2

是的,你需要使用csv模塊,並且你要設置分隔符「\ t」:

spamReader = csv.reader(open('spam.csv', 'rb'), delimiter='\t') 

之後,你應該能夠重複:

for row in spamReader: 
    print row[n] 
+0

但是,如果我想要求用戶輸入「searchcolumn」,以便我可以搜索特定列上的值....不是連續的。 – Craig

+0

以上將讓您搜索該列。 'if row [n] == searchterm:#do something.' – cwallenpoole

3

您還可以使用嗅探器(例如,從http://docs.python.org/library/csv.html拍攝)

csvfile = open("example.csv", "rb") 
dialect = csv.Sniffer().sniff(csvfile.read(1024)) 
csvfile.seek(0) 
reader = csv.reader(csvfile, dialect) 
0

打印在所有行在第四製表符分隔的列 'myvalue的':

with open(filename) as infile: 
    for row in infile: 
     if row.split('\t')[3] == 'myvalue': 
      print row 

替換3, 'myvalue的' 和print適當。