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

问题描述:

我有一个包含30000000个条目的csv文件。
像这样

I have a csv file contaning 30000000 entries. like this

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

当我尝试反转单词顺序
我遇到以下错误

When I try to reverse the word order I am getting the following error

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

The file is 1.4 Gb in size

wc -L s.csv

936

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

1,
186个字符

����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!� 1, 186 characters

您至少有一行,其中没有两行由制表符分隔。例如,如果是空行,或者您的格式实际上没有使用制表符。

You have at least one row that doesn't have 2 columns separated by a tab. An empty line, for example, or if your format doesn't actually use tabs.

您有两个选择:


  1. 跳过行数少于所需列的行:

  1. skip rows with fewer columns than you need:

for row in reader:
    if len(row) < 2:
        continue
    writer.writerow((row[1], row[0]))


  • 修复分隔符以匹配实际文件内容:

  • fix your delimiter to match the actual file content:

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

    您可以使用 csv.Sniffer()尝试自动执行定界符选择,如果要处理的文件不止一个,并且这些文件不是全部​​遵循相同的CSV方言。

    you could use the csv.Sniffer() class to try and automate delimiter selection, if you have more than one file to process, and these files are not all following the same CSV dialect.