带有UTF-8数据的Python CSV DictReader

LMa*_*ter 29 python csv unicode

AFAIK,Python(v2.6)csv模块默认不能处理unicode数据,对吗?在Python文档中有一个关于如何从UTF-8编码文件中读取的示例.但是此示例仅将CSV行作为列表返回.我希望按名称访问行列,csv.DictReader但是使用UTF-8编码的CSV输入文件.

谁能告诉我如何以有效的方式做到这一点?我将不得不处理100个MByte大小的CSV文件.

LMa*_*ter 51

我自己想出了一个答案:

def UnicodeDictReader(utf8_data, **kwargs):
    csv_reader = csv.DictReader(utf8_data, **kwargs)
    for row in csv_reader:
        yield {unicode(key, 'utf-8'):unicode(value, 'utf-8') for key, value in row.iteritems()}
Run Code Online (Sandbox Code Playgroud)

注意:这已更新,因此根据评论中的建议解码密钥

  • -1这不会解码文件第一行中的字典键. (9认同)
  • 正如John Machin所说,这不会解码密钥; yield行应该是:yield {unicode(key,'utf-8'):key的unicode(value,'utf-8'),row.iteritems()中的值 (3认同)
  • 无需为回答您自己的问题而道歉.这是stackoverflow的预期用途之一.现在其他人都可以分享你自己教的内容! (2认同)

sha*_*ker 5

对我而言,关键不是操纵csv DictReader args,而是操纵文件打开器本身。这达到了目的:

with open(filepath, mode="r", encoding="utf-8-sig") as csv_file:
    csv_reader = csv.DictReader(csv_file)
Run Code Online (Sandbox Code Playgroud)

不需要特殊的课程。现在,无论有没有BOM,我都可以打开文件而不会崩溃。