簡體   English   中英

IndexError:列表索引超出了CSV文件讀取python中的范圍

[英]IndexError: list index out of range in CSV file reading python

我有一個包含30000000個條目的csv文件。 像這樣

കൃഷി 3
വ്യാപകമാകുന്നു 2
നെല്‍കൃഷി 2
വെള്ളം 2
നെല്ല് 2
മാത്രമേ 2
ജല 2

當我嘗試反轉單詞順序時,出現以下錯誤

Traceback (most recent call last):
  File "/home//grpus/dg.py", line 8, in <module>
    writer.writerow((row[1], row[0]))
IndexError: list index out of range

這是代碼:

import csv

with open('s.csv', 'rb') as f:
    reader = csv.reader(f, delimiter='\t')
    with open("revmal.txt", "w") as o:
        writer = csv.writer(o, delimiter='\t')
        for row in reader:
            writer.writerow((row[1], row[0]))

編輯

 writer.writerow(row[::-1])

當我嘗試修復它時

如何解決這個錯誤?

 Traceback (most recent call last):
      File "/home/grpus/dg.py", line 7, in <module>
        for row in reader:
    Error: field larger than field limit (131072)

該文件的大小為1.4 Gb

wc -L s.csv

936

{if(length($0)>max){max=length($0);maxline=$0}}END{print maxline} This produced 

! 1,186個字符

您至少有一行沒有兩列,且各列之間沒有一個制表符。 例如,如果顯示為空行,或者您的格式實際上未使用制表符。

您有兩種選擇:

  1. 跳過行數少於所需的行:

     for row in reader: if len(row) < 2: continue writer.writerow((row[1], row[0])) 
  2. 修復分隔符以匹配實際文件內容:

     reader = csv.reader(f, delimiter=' ') 

    如果您要處理多個文件,並且這些文件並非都遵循相同的CSV方言,則可以使用csv.Sniffer()嘗試自動執行定界符選擇。

由於您要做的就是以相反的順序寫入文件,因此只需將同一行寫回,但是要相反。 像這樣:

 writer.writerow(row[::-1])

負索引從右開始,而負步進值(slice語法中的第三個參數)將簡單地反轉對象。

這將停止您現在看到的錯誤,並且如果您的行列不是2,則它們也將以相反的方式寫入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM