索引器错误:在读取python的CSV文件中,列表索引超出范围

2024-05-08 23:09:19 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

当我试图颠倒词序时 我得到以下错误

^{pr2}$

代码如下:

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个字符


Tags: csvinfieldforas错误withopen
2条回答

由于您只想以相反的顺序写入文件,所以只需将同一行写回原处,但要以相反的顺序执行;如下所示:

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

一个负索引从右边开始,一个负的步长值(slice语法中的第三个参数)只会反转对象。在

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

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

您有两种选择:

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

    for row in reader:
        if len(row) < 2:
            continue
        writer.writerow((row[1], row[0]))
    
  2. 修复分隔符以匹配实际的文件内容:

    ^{pr2}$

    如果有多个文件要处理,并且这些文件不都遵循同一个CSV方言,则可以使用^{} class尝试自动选择分隔符。

相关问题 更多 >

    热门问题