繁体   English   中英

dict()-Python 2.7 3.5以来-

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM