2013-04-20 240 views
0

我正在處理將csv文件轉換爲ArcGIS shapefile的項目,這涉及將輸出寫入單獨的文件。我已經爲每一行中的每一列創建了一個列表,並試圖對列36和37進行索引。但是,在執行此操作時,我收到了一條list index out of range錯誤消息。關於我可能在做什麼的任何建議?循環中的索引超出範圍

while line: 
    count = count + 1 
    line = inFile.readline() 
    print 'Row', count, 'line info=', line[:72] 
    lineList = line.split(',') 
    newList = lineList[:72] 
    print 'line info =', newList 
    for item in newList[36]: 
     item.replace("", "0") 
    for item in newList[37]: 
     item.replace("", "0") 
    newLine = ','.join(newList) 
    newLine = newLine + '\n' 
    formatLine = newLine.replace("/","_") 
    outFile.write(formatLine) 
+0

你有沒有嘗試過使用類似於count,enumerate(infile.readline())中的行:#do work?這將節省很多您的管理和檢查。 readline()會在文件結束時立即停止,並且意味着您不必擔心該索引超出範圍錯誤。 – Bear 2013-04-20 02:17:16

+0

不知道你是否知道它,但有一個[** Geographic Information Systems Stack Exchange **](http://gis.stackexchange.com/)專門研究這樣的問題 - 至少一旦它超越了Python語法和shapefile格式。 – PolyGeo 2013-05-02 22:00:05

回答

3

如果您可以編輯問題以包含錯誤指出索引超出範圍的問題,這將有所幫助。

我認爲這個問題很可能是這樣的:

while line: # line is something other than whitespace 
    line = inFile.readline() # next line becomes whitespace, there might be a trailing newline character in the file 
    ... 
    newList = line.split(',')[:72] # Even if line.split(',') doesn't return a list with at least 72 values, there will not be an error here- it will merely return a shorter list. 
    for item in newList[36]: # newList is probably an empty list at this point. 
    ... 

在一個側面說明,我鍵入以下到Python外殼:

>>> bool("") 
False 
>>> bool(" ") 
True 
>>> bool("\n") 
True 

正如你可以看到,如果有一條只有一個空格的行,那麼循環也會繼續。