【问题标题】:UnicodeDecodeError With CSV FileCSV 文件的 UnicodeDecodeError
【发布时间】:2017-01-27 19:46:14
【问题描述】:

当我导入 csv 文件时,python 会抛出以下错误:

  File "/Users/sethkillian/Documents/Python/metar/metar.py", line 31, in get_AirportInfo
    for line in airports:

  File "/Users/sethkillian/anaconda/lib/python3.5/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 358: ordinal not in range(128)

使用 Microsoft Excel,我将文件保存为 UTF-8 CSV 文件。

我也尝试将.decode('UTF-8') 放在末尾,但它不接受字符串。

这是我的原始代码:

def get_AirportInfo():
    airports = open('airport_codes.csv','r')
    for line in airports:
        print(line.strip().split(','))

有什么想法吗?我查看了该文件,但找不到任何应该触发它的特殊字符。

【问题讨论】:

  • 试试 airports = open("'airport_codes.csv'", "r", encoding="utf-8")
  • 你能把文件寄出去吗?我通常会遍历并尝试解码每列中的每个值,以查看导致错误的值。

标签: python csv text readfile


【解决方案1】:

在Python3中str没有decode属性,但是你可以将文件读取为二进制,并逐行解码

with open('airport_codes.csv', 'rb') as fp:

for line in fp:
    print(line.decode('utf-8').strip().split(','))

如果你想让它与 Python2 兼容,请使用 codecs 模块,尽管在 Python3 中内置的 openencoding 的参数:

import codecs

with codecs.open('airport_codes.csv', 'r', encoding = 'utf-8'):

for line in fp:
    print(line.strip().split(','))

这些解决方案可能会起作用,因为如果后面跟着另一个字节,0xc3 可能在 utf-8 中有效。

【讨论】:

    猜你喜欢
    • 2018-10-24
    • 2018-12-26
    • 1970-01-01
    • 2012-09-26
    • 2019-10-02
    • 2018-08-23
    • 2017-07-26
    • 2013-08-12
    相关资源
    最近更新 更多