2011-12-08 69 views
0

前段時間我開始研究一個簡單的程序,我已經回到了它。我在這裏要做的是使用索引來操縱CSV數據打印的順序。當我運行這段代碼時,我得到「IndexError:列表索引超出範圍」。我做錯了什麼或失蹤?提前致謝。嘗試從CSV索引數據

import csv 

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

for row in mags: 

    print [titles.upper() for titles in row] 

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

您粘貼的代碼包含錯誤,變量'mags'未定義。更換成員後,我發現沒有錯誤。什麼是CSV文件的內容? – hzm

+0

奇怪。你是否說如果你替換'mags'變量,你不再會得到indexerror? CSV包含雜誌的標題和日期。 – mantissa45

+0

是的,我沒有看到'IndexError'與我自己的CSV文件,所以我想知道CSV文件中的一些行導致這個問題。你能否從CSV文件中粘貼一些行?或者您可以在打印列表之前打印出「行」,這可以幫助找到問題。 – hzm

回答

1

你的錯誤看起來是對代碼的最後一行。它看起來像你的循環遇到一個有0個字段的空行,所以row [index]引發IndexError。或者該行只有1個字段,所以當索引爲1時,row [index]會引發錯誤。這將修復它:

if len(row) >= 2: 
    print [row[index] for index in (1, 0)] 
+0

而不是第二個循環感謝Phil! – mantissa45

+0

如何將低級函數合併到此代碼中? – mantissa45

+0

你是什麼意思? – Phil

1

根據csv.reader()中的文檔,從csv文件讀取的每一行都以字符串列表形式返回。我想你的文件中有空字段或行。

所以,你應該這樣做:

​​3210

但你也可以使用:

members = csv.reader(open("mags.csv","rU")) 
for row in members: 
    row.reverse() 
    for element in row: 
    print element 
+0

感謝ILYA。這絕對顛倒了我想要的數據順序。現在我需要弄清楚如何在同一行上打印。 – mantissa45

+0

您可以使用'print','。join(row)' –

相關問題