2011-12-10 70 views
0

我想使用'。'作爲分隔符,但我得到一個「IndexError:列表索引超出範圍」錯誤與下面的代碼。如果我刪除了分隔符部分,代碼將按我的需要工作。任何想法爲什麼這個?提前謝謝了。定界符問題

import csv 

mags = csv.reader(open("mags.csv","rU"), delimiter='.') 

for row in mags: 

    print [item.lower() for item in [row[index] for index in (1, 0)]] 
+0

請問您可以發表幾條樣本?正如@cherhan所言, – cherhan

+1

,發佈了一些樣本行。從那裏的一部分似乎是你的循環問題,而不是分隔符'。' –

+0

如果我完全刪除分隔符,下面是一些示例行:['tom','smith'] ['ben','cohen'] ['scott','friedman'] ['michael',' jones'] – mantissa45

回答

2

也許有一條線缺少.分隔符。

要查看csv.reader正在做什麼,請在其他打印語句之前添加print repr(row)。這可能會揭示一條只被解析爲零或一個字段的行。

如果數據實際上有每行的.分隔符,您的代碼將很好地工作:

>>> txt = '''\ 
tom.smith 
ben.cohen 
scott.friedman 
michael.jones 
'''.splitlines() 
>>> import csv 
>>> for row in csv.reader(txt, delimiter='.'): 
     print [item.lower() for item in [row[index] for index in (1, 0)]] 

['smith', 'tom'] 
['cohen', 'ben'] 
['friedman', 'scott'] 
['jones', 'michael'] 

這可能是因爲您輸入的數據有逗號爲分隔符和要用於輸出不同的分隔符。方法如下:

>>> txt = '''\ 
tom,smith 
ben,cohen 
scott,friedman 
michael,jones 
'''.splitlines() 
>>> for row in csv.reader(txt): 
     print '.'.join([item.lower() for item in [row[index] for index in (1, 0)]]) 

smith.tom 
cohen.ben 
friedman.scott 
jones.michael 
+0

我在之前的評論中顯示的示例行是運行代碼而不使用分隔符的結果。如果我運行的代碼出現在我原來的問題中,那就是當我得到「超出範圍IndexError」。合理? – mantissa45

+0

@ mantissa45你能告訴我們你的csv文件嗎?如果它沒有''。作爲分隔符,那麼它看起來像你的csv沒有''分隔。 – marcocamejo

+0

@marcocamejo:你是對的; CSV的內容不以'。'分隔它們只是10行中的名字和雜誌標題。什麼是分享實際CSV的最佳方式? – mantissa45