Python “csv读取提高”;UnicodeDecodeError:&x27;charmap';编解码器可以';“不解码…”;

Python “csv读取提高”;UnicodeDecodeError:&x27;charmap';编解码器可以';“不解码…”;,python,encoding,Python,Encoding,我读过我能找到的每一篇文章,但我的处境似乎是独一无二的。我对Python完全陌生,所以这可能是最基本的。我得到以下错误: UnicodeDecodeError:“charmap”编解码器无法解码位置70中的字节0x8d:字符映射到未定义 当我运行代码时: import csv input_file = 'input.csv' output_file = 'output.csv' cols_to_remove = [4, 6, 8, 9, 10, 11,13, 14, 19, 20, 21, 2

我读过我能找到的每一篇文章,但我的处境似乎是独一无二的。我对Python完全陌生,所以这可能是最基本的。我得到以下错误:

UnicodeDecodeError:“charmap”编解码器无法解码位置70中的字节0x8d:字符映射到未定义

当我运行代码时:

import csv

input_file = 'input.csv'
output_file = 'output.csv'
cols_to_remove = [4, 6, 8, 9, 10, 11,13, 14, 19, 20, 21, 22, 23, 24]

cols_to_remove = sorted(cols_to_remove, reverse=True)
row_count = 0 # Current amount of rows processed

with open(input_file, "r") as source:
    reader = csv.reader(source)
    with open(output_file, "w", newline='') as result:
        writer = csv.writer(result)
        for row in reader:
            row_count += 1
            print('\r{0}'.format(row_count), end='')
            for col_index in cols_to_remove:
                del row[col_index]
            writer.writerow(row)
我做错了什么

  • 尝试
    pandas
  • 
    input\u file=pandas.read\u csv('input.csv'))
    output\u file=pandas.read\u csv('output.csv'))
    

  • 再次尝试将文件保存为CSV UTF-8
  • 打开文件时添加
    encoding=“utf8”
    。请尝试以下方法:

    with open(input_file, "r", encoding="utf8") as source:
        reader = csv.reader(source)
        with open(output_file, "w", newline='', encoding="utf8") as result:
    

    在Python3中,csv模块将文件处理为unicode字符串,因此必须首先对输入文件进行解码。如果您知道的话,可以使用精确编码,或者只使用拉丁语1,因为它将每个字节映射到具有相同代码点的unicode字符,因此解码+编码可以保持字节值不变。您的代码可能会变成:

    ...
    with open(input_file, "r", encoding='Latin1') as source:
        reader = csv.reader(source)
        with open(output_file, "w", newline='', encoding='Latin1') as result:
            ...
    

    您使用的是哪种python版本?@shubhambharti201 3.7这是一个解码错误。您可以找到帮助。您应该检查位置70处的字符,并找到该字符的编码格式。然后对文件进行相应的编码。UTF-8通常是Python 3中的默认编码。如果它与默认编码中断,它很可能与UTF-8中断…@SergeBallesta知道它为什么在默认情况下尝试使用
    charmap
    对其进行解码吗?我没有看到他/她在打开文件时指定了编码,所以我希望它也是UTF-8。到目前为止,这似乎至少可以克服错误。还有700万条生产线需要处理,所以看到输出会很有趣。我确实确认了编码是UTF-8,但是按照其他人的建议添加了一个
    encoding=“utf8”
    ,导致了不同的解码错误。