【发布时间】:2014-05-28 16:08:32
【问题描述】:
我是 python 新手,并尝试了解如何使用 csv.DictReader 上的过滤器功能来过滤 csv 文件中的行。 filter() 可用于“可迭代”,据我了解,DictReader 适合此 definition。
但是当我尝试时
f = open('file1.csv', 'r')
dialect = csv.Sniffer().sniff(f.read(1024))
f.seek(0)
reader = csv.DictReader(f, None, None, None, dialect)
filteredReader = filter(None, reader) #None will be replaced with my function
for i in filteredReader:
print(i)
我收到TypeError: normcase() argument must be str or bytes, not 'DictReader'。
请注意,我不想过滤文件指针 (e.g. here),而是过滤已解析的 csv 行。你知道怎么做吗?
【问题讨论】:
-
这里的
filteredReader是什么?什么是完整的追溯?使用dialect时,不需要传入3个None参数,直接使用csv.DictReader(f, dialect=dialect)即可。 -
至于你贴的异常,这里贴的代码是不能引发的;看起来好像您将
reader传递给os.path.normcase()function 或其他东西。fr = filteredReader()行在这里完全是一个红鲱鱼;你甚至没有使用那个对象。 -
很抱歉给您带来了困惑。我的问题无效,其他代码段引发了错误。
标签: python csv python-3.x filter iteration