python csv TypeError:不可损坏类型:“list”

2024-04-20 03:06:36 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正试图比较两个csv文件,并得到差异。但是我得到了上面提到的错误。有人能帮忙吗。谢谢

import csv

f = open('ted.csv','r')
psv_f = csv.reader(f)
attendees1 = []
for row in psv_f:
attendees1.append(row)

f.close

f = open('ted2.csv','r')
psv_f = csv.reader(f)
attendees2 = []
for row in psv_f:
    attendees2.append(row)


f.close

attendees11 = set(attendees1)
attendees12 = set(attendees2)

print (attendees12.difference(attendees11))

Tags: csvinforcloseopenreaderrowset
3条回答

导致您创建了列表列表:

attendees1.append(row)

像wise一样:

^{pr2}$

那么当你这样做的时候:

attendees11 = set(attendees1)

错误将被抛出

你应该做的是:

attendees2.append(tuple(row))

发生在线路上

attendees11 = set(attendees1)

不是吗?您试图从列表列表中生成一个集合,但这是不可能的,因为集合可能只包含散列类型,而列表不是。可以将列表转换为元组。在

^{pr2}$

当你迭代csv阅读器时,你会得到列表,所以当你这样做的时候

for row in psv_f:
    attendees2.append(row)

行实际上是一个列表实例。因此attendees1/attendees2是一个列表。

当您将其转换为set()时,需要确保没有项目出现超过一次,并且set()中继列表中项目的哈希函数。所以你得到了一个错误,因为当你转换为set()时,它试图散列一个列表,但是列表是不可散列的。在

如果执行以下操作,则会出现相同的异常:

^{pr2}$

更多集合:https://docs.python.org/2/library/sets.html

相关问题 更多 >