IndexError:列表索引超出CSV文件读取python的范围

时间:2014-03-05 13:52:59

标签: python csv

我有一个包含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个字符

2 个答案:

答案 0 :(得分:2)

您至少有一行没有由标签分隔的2列。例如,空行,或者如果您的格式实际上不使用制表符。

您有两种选择:

  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() class尝试自动选择分隔符。

答案 1 :(得分:1)

因为您要做的就是以相反的顺序写入文件,只需将相同的行写回,但反过来;像这样:

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

负索引从右侧开始,负步长值(切片语法中的第三个参数)将简单地反转该对象。

这将停止您现在看到的错误,如果您的行列不是2,则它们也将反向写入。