代码之家  ›  专栏  ›  技术社区  ›  Jishan

dictwriter引发unicodeencodeerror

  •  0
  • Jishan  · 技术社区  · 7 年前

    我的csv文件如下:

    "Domain", "A"
    rolexkings.ml,1
    netmajic.com,1
    northumbrianresort.info,2
    дольщикиспб.рф,1
    

    为了更新它,我正在做以下工作(工作片段,但不是实际的逻辑,以实现简洁性)

    filename = 'file.csv'
    tempfile = NamedTemporaryFile(mode='w', delete=False)
    fields = ["Domain", "A"]
    
    with open(filename, 'r', encoding='utf-8') as csvfile, tempfile:
    
        reader = csv.DictReader(csvfile, fieldnames=fields)
        writer = csv.DictWriter(tempfile, fieldnames=fields)
    
        next(reader, None)  # skip the headers
    
        for row in tqdm(reader):
            print(row['Domain'])
            row = {'Domain': row['Domain'], 'A': row['A']}
            writer.writerow(row)
    
    shutil.move(tempfile.name, filename)
    

    一旦我遇到非拉丁语领域,我就会被甩:

    UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-10: character maps to <undefined>
    

    我怎么修?谢谢!

    1 回复  |  直到 7 年前
        1
  •  1
  •   Blckknght    7 年前

    您需要为指定编码 tempfile . 它似乎以ASCII模式打开 charmap codec)默认情况下,不能处理西里尔文字符串。你可能想用 utf-8 ,因为这是正在读取输入文件的编码。

    你也应该加上 newline="" 两个文件打开调用,正如 csv 模块,它本身处理“通用”换行,而不是依赖于Python的正常支持。对于当前操作系统上的当前数据集来说,这可能无关紧要,但如果您希望代码是通用的,这是一个好主意。