Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-列表索引超出csv文件范围_Python_Python 2.7 - Fatal编程技术网

Python-列表索引超出csv文件范围

Python-列表索引超出csv文件范围,python,python-2.7,Python,Python 2.7,我试图制作一本字典,统计csv文件第13到第17列中每个条目的数量。这是我目前的代码: import unicodecsv with open('hashtag.csv', 'r') as inp, open('hashtag3.csv', 'w') as out: writer = unicodecsv.writer(out, delimiter=';', lineterminator='\n',encoding='ISO-8859-1') stuff = unicodecs

我试图制作一本字典,统计csv文件第13到第17列中每个条目的数量。这是我目前的代码:

import unicodecsv

with open('hashtag.csv', 'r') as inp, open('hashtag3.csv', 'w') as out:
    writer = unicodecsv.writer(out, delimiter=';', lineterminator='\n',encoding='ISO-8859-1')
    stuff = unicodecsv.reader(inp, delimiter=';', encoding='ISO-8859-1')
    my_dict={}

    for row in stuff:
        for i in range (13,18):
            if row[i] in my_dict:
                my_dict[row[i]]+=1
            else:
                my_dict[row[i]]=1
    print my_dict
然而,当我尝试运行它时,它告诉我这一点

我的遗嘱中的第[i]行: 索引器:列表索引超出范围

我试着单独获取每个索引,以找出它出错的地方,并发现它适用于第[13]行,但不适用于我范围内的任何其他整数。
我想可能是因为在其他列中,有一些空单元格,但我甚至无法在其他列中执行if请求,而不会得到相同的错误。

出于某种原因,
似乎没有所有13-18列。
将循环的
修改为

for i in range(13,min(len(row),18)):
PS,
而不是(有点)繁琐的<代码>如果MyQuiTd< /Cord>中的行[I],您可以考虑使用:


只是想澄清一下:如果它是一个CSV文件,那么您的分隔符肯定是
?包括一小部分数据样本。从in-file.collections.defaultdict的一个替代方案是
my_dict[row[i]]=my_dict.get(row[i],0)+1
@zwer确实如此,但我认为
defaultdict
代码更“可读”和“优雅”(非常主观的品质)。老实说,我没有任何偏好地使用这两种方法……我变得懒惰,使用@zwer的解决方案,而不是使用
defaultdict
。在我的辩护中,有时您确实希望无法访问未定义的键值。@Shai-同意,但这是一个偏好问题-例如,有些人可能会认为,当您的代码不依赖于外部定义的类型时(尽管我不会调用
defaultdict
外部定义的类型,但是…)它确实提供的一个优点是,如果键不存在,您可以有条件地设置默认值-例如,您有一个具有由键映射的起始“计数”的查找表,您可以使用
my_dict[row[i]]=my_dict.get(row[i],lookup[row[i]])+1
(但是,您可以从该查找中预构建密钥,而且……现在我只是漫无目的地说……)
from collections import defaultdict

my_dict = defaultdict(int)  # accessing a new key returns zero
# ...
for row in stuff:
    for i in xrange(13, min(18, len(row))):
        my_dict[row[i]] += 1