dict() - Python 2.7从3.5开始 -

时间:2015-11-17 11:06:52

标签: python python-2.7 csv dictionary python-3.5

在我的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)

这是对的吗?

1 个答案:

答案 0 :(得分:0)

IP.csv中是否有空行?

您的代码DID在我的计算机上在Python 3.5下“顺利”运行,但如果我在文件的开头添加一个空行,它将失败。

尝试在for循环中添加print(enum),您将知道导致此异常的确切原因。