来自CSV索引器的Python Dict

来自CSV索引器的Python Dict,python,csv,dictionary,Python,Csv,Dictionary,我需要比较2个CSV文件,我正在尝试使用@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列和20

我需要比较2个CSV文件,我正在尝试使用@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,,,,

我不知道为什么我会成为索引器。请帮助解决此问题。

您的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

关于如何跳过csv中的空行,请参阅本节。

一分钟前您有空格,分隔数据的是空格还是逗号?您的代码自编辑以来运行良好。很抱歉@Padraiccnningham我有逗号。谢谢@rvraghav93!就是这样,在文件的底部有几行只有一列。我把那些都拿走了,现在它可以正常工作了。