首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IndexError:列表索引超出CSV文件读取python的范围

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

Stack Overflow用户
提问于 2014-03-05 21:52:59
回答 2查看 3.2K关注 0票数 0

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

代码语言:javascript
复制
കൃഷി 3
വ്യാപകമാകുന്നു 2
നെല്‍കൃഷി 2
വെള്ളം 2
നെല്ല് 2
മാത്രമേ 2
ജല 2

当我尝试颠倒单词顺序时,我得到了以下错误

代码语言:javascript
复制
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

代码如下:

代码语言:javascript
复制
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]))

编辑

代码语言:javascript
复制
 writer.writerow(row[::-1])

当我试图修复它的时候

如何修复此错误?

代码语言:javascript
复制
 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

代码语言:javascript
复制
wc -L s.csv

936

代码语言:javascript
复制
{if(length($0)>max){max=length($0);maxline=$0}}END{print maxline} This produced 

����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!�1,186个字符

EN

回答 2

Stack Overflow用户

发布于 2014-03-05 21:59:06

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

您有两个选择:

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

对于阅读器中的行: if len( row ) < 2: continue writer.writerow((row1,row))

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

读卡器= csv.reader(f,delimiter=‘')

如果您有多个文件要处理,并且这些文件并不都遵循相同的CSV方言,则可以使用csv.Sniffer() class尝试并自动选择分隔符。

票数 2
EN

Stack Overflow用户

发布于 2014-03-05 22:13:27

由于您所要做的就是以相反的顺序写入文件,所以只需写回相同的行,但是是相反的;如下所示:

代码语言:javascript
复制
 writer.writerow(row[::-1])

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22199747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档