2013-01-01 24 views
0

我正在使用python從csv文件中將行從csv模塊中提取到列表中。 csv文件相當大,大約45,000行,而且好像有些行被破壞了。
當使用python的csv.reader模塊時,它只能讀取大約1000行,然後到達一個損壞的行並停止讀取,甚至沒有提供錯誤消息。 由於該文件非常大,因此很難手動進行更改。我爲第一條損壞的線路做了一次,它確實設法讀取了500多行,然後它顯然到達了另一條損壞的線路並停止。 我很樂意得到如何處理這個問題的想法,因爲由於它的大小(〜500 MB),打開文件和編輯文件是不可能的。在一個大的csv文件中損壞的行

謝謝。

+1

腐敗的性質是什麼?你可以發佈一個示例行,也許一些好的? – Thomas

+2

你有什麼特別的代碼?一個「損壞」線路的例子也會很好。 – favoretti

+2

它以哪種方式損壞?缺失數據?缺少分隔符? – eandersson

回答

0

如果它是安全的假設,每行是一個入口,你可以嘗試拆分文件中的塊〜500線,例如,一旦你發現解析的條目數是不是該行的,你可以檢查那個較小的子集,等等。

例如:

for i, line in enumerate(original_file): 
    chunk_file.write(line+'\n') 
    if i == 500: break 

然後解析chunk_file,看看有多少數據被解析。如果相等,繼續;如果沒有,它在那裏損壞。

0

我建議想是這樣的:

with open('largeFile.csv', 'r') as csvfile: 
    for k, line in enumerate(csvfile): 
     row = line.strip().split(',') 
     if len(row) != <YourExpectedNumberOfColumns>: 
      print(k,row) 

這代表的主要是打印您的問題線,這可能會幫助你專注於你的調試工作的機會。