2010-10-08 63 views
1

我在想要讀取第三列的文件中有以下行;在文件中,我沒有數字列:Python:通過一個文件循環訪問特定行

  1. 紅色;藍色;綠色;白色;橙子;
  2. 綠色;白色;橙子;
  3. 藍色;綠色;白色;
  4. 紅色;藍色;綠色;白色;
  5. 藍色;綠色;白色;橙子;
  6. 橙色
  7. 綠色;白色;橙子;
  8. 白色;橙色
  9. 綠色;

我用這個代碼行做到這一點:

lines = i.split(";")[2] 

的問題是,某些行只有一個列或兩個,所以它給了我「索引超出範圍」的錯誤。請告訴我如何解決這個問題?

非常感謝 阿迪亞

+0

好吧,當沒有足夠的列時想做什麼? – SilentGhost 2010-10-08 14:07:10

回答

1

使用片而不是指數。

>>> with open('test.txt') as f_in: 
...  column3 = (line.split(';')[2:3] for line in f_in) 
...  column3 = [item[0] for item in column3 if item] 
... 
>>> column3 
[' Green', ' Orange', ' White', ' Green', ' White', ' Orange'] 
+0

+1:腦海中有着幾乎相同的想法。 – eldarerathis 2010-10-08 14:10:20

2

怎麼樣這樣的:

cols = i.split(";") 
if (len(cols) >= 3): 
    lines = cols[2] 
else: 
    #whatever you want here 
2

簡單的解決方案是檢查列數並忽略少於三列的行。

third_columns = [] 
with open("...") as infile: 
    for line in infile: 
     columns = line.split(';') 
     if len(columns) >= 3: 
      third_columns.append(columns[2]) 

如果你解析CSV(好像你這樣做),你最好使用大量的現存的CSV解析器之一,e.g. the one in the standard library

0
for line in open("file"): 
    try: 
     s=line.split(";")[2] 
    except: pass 
    else: 
     print s 
+2

裸露的除外是邪惡的 – SilentGhost 2010-10-08 15:01:28