【发布时间】:2018-12-11 14:48:45
【问题描述】:
我正在尝试为 babel 编写自定义提取方法,以从 csv 文件中的特定列中提取字符串。我遵循了文档here。
这是我的提取方法代码:
def extract_csv(fileobj, keywords, comment_tags, options):
import csv
reader = csv.DictReader(fileobj, delimiter=',')
for row in reader:
if row and row['caption'] != '':
yield (reader.line_num, '', row['caption'], '')
当我尝试运行提取时出现此错误:
文件“/Users/tiagosilva/repos/naltio/csv_extractor.py”,第 18 行,在 extract_csv 中 对于阅读器中的行: 下一步中的文件“/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/csv.py”,第 111 行 self.fieldnames 文件“/usr/local/Cellar/python/3.6.5/Frameworks/Python.framework/Versions/3.6/lib/python3.6/csv.py”,第 98 行,在字段名中 self._fieldnames = next(self.reader) _csv.Error: 迭代器应该返回字符串,而不是字节(你是否以文本模式打开文件?)
似乎传递给函数的 fileobj 是以二进制模式打开的。
如何做到这一点?我能想到 2 种可能的解决方案,但我不知道如何编码:
1) 有没有办法将它与 DictReader 一起使用?
2) 有没有办法让 babel 以文本模式打开文件?
我对其他未列出的解决方案持开放态度。
【问题讨论】:
标签: python python-3.x csv python-babel