在我的prototype工作之后,我仍在尝试比较两个CSV文件。 这次我使用字典。
我的第一个文件是:
IP
192.168.10.1
192.168.10.15
192.168.10.32
一个列,带有IP地址。
我想检查这些IP是否也是另一个名为epoch.csv的文件。 如果是,我会在epoch.csv中写一个带有该行副本的CSV文件。
在Python 2.7中,我编写的代码运行顺畅:
with open('IP.csv', 'r') as master:
enum = csv.reader(master)
master_indices = dict((r[0], i) for i, r in enumerate(enum))
with open('epoch.csv', 'r') as hosts:
with open('result.csv', 'w') as results:
reader = csv.reader(hosts)
writer = csv.writer(results)
for row in reader:
index = master_indices.get(row[1])
if index is not None:
writer.writerow(row)
但是,当我尝试使用Python 3.5(Windows)运行此代码时,我收到此错误:
File "IP.py", line 43, in (module)
master_indices = dict((r[0], i) for i, r in enumerate(enum))
File "IP.py", line 43, in (genexpr)
master_indices = dict((r[0], i) for i, r in enumerate(enum))
IndexError: list index out of range
为什么它适用于一种情况而不适用于另一种情况。我当然可以在我的所有机器上重新安装2.7,但我想了解它为什么不起作用......
编辑:
所以考虑到csv.DictReader,我想我可以修改这一行:
with open('IP.csv', 'r') as master:
enum = csv.reader(master)
master_indices = dict((r[0], i) for i, r in enumerate(enum))
像这样简单得多:
with open('IP.csv', 'r') as master:
enum = csv.Dict.Reader(master)
这是对的吗?
答案 0 :(得分:0)
IP.csv
中是否有空行?
您的代码DID在我的计算机上在Python 3.5下“顺利”运行,但如果我在文件的开头添加一个空行,它将失败。
尝试在for循环中添加print(enum)
,您将知道导致此异常的确切原因。