来自CSV IndexError的Python Dict

时间:2014-07-15 20:06:29

标签: python csv dictionary

我需要比较2个CSV文件,我试图在Python: Comparing two CSV files and searching for similar items使用@Martijn Pieters解决方案,但我遇到了错误:

IndexError: list index out of range

这是我正在使用的代码,

import csv
with open('filename.csv', 'rb') as a:
  indices = dict((r[2], i) for i, r in enumerate(csv.reader(a)))
  print indices

filename.csv有10列和2000行。我想索引具有主机名的第3列,然后与其他.csv文件中的主机名匹配

type,id,hostname,os,,,,
phy,123,server1,rhel5,,,,
vir,234,server2,rhel6,,,,

我不知道为什么我会得到IndexError。请帮助解决问题。

1 个答案:

答案 0 :(得分:4)

csv文件的开头或结尾可能有空行。

我能够使用以下代码重现此错误:

import csv

with open('filename.csv', 'wb') as a:
    strng = """
type,id,hostname,os,,,,
phy,123,server1,rhel5,,,,
vir,234,server2,rhel6,,,,

"""
    a.write(strng)

with open('filename.csv', 'rb') as a:
    indices = dict((r[2], i) for i, r in enumerate(csv.reader(a)))
    print indices

然而,当我删除这些空行时,代码运行完美:

import csv

with open('filename.csv', 'wb') as a:
    strng = """type,id,hostname,os,,,,
phy,123,server1,rhel5,,,,
vir,234,server2,rhel6,,,,    
"""
    a.write(strng)

with open('filename.csv', 'rb') as a:
    indices = dict((r[2], i) for i, r in enumerate(csv.reader(a)))
    print indices

请参阅此SO Answer,了解如何跳过csv中的空白行。