[英]dict () - Python 2.7 From 3.5 -
在完成原型工作之后,我仍在尝试比较两个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)
这是正确的吗?
IP.csv
是否有任何空行?
您的代码DID在Python 3.5下在我的计算机中“平稳地”运行,但是如果我在文件的开头添加空行,它将失败。
尝试在for循环中添加print(enum)
,您将确切地知道导致此异常的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.