Python 错误:UnicodeDecodeError:'utf-8' 编解码器无法解码位置 0 中的字节 0xdb:数据意外结束

问题描述 投票:0回答:1

我正在尝试使用 python 在 jsonl 文件中附加一列 csv 文件。我尝试了以下代码:-

    import csv
    import json

def csv_column_to_jsonl(csv_file, column_index, jsonl_file):
    with open(csv_file, 'r', encoding='utf-8-sig') as file:
        reader = csv.reader(file)
        data = [row[column_index] for row in reader]

    with open(jsonl_file, 'a',encoding='ascii') as file:
        for item in data:
            json.dump({"text": item}, file)
            file.write('\n')


csv_file = 'mydataset.csv'
column_index = 2  
jsonl_file = 'jsondata.jsonl'
csv_column_to_jsonl(csv_file, column_index, jsonl_file)

我遇到错误

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xdb in position 0: unexpected end of data

使用chardet,编码类型如下:-

jsondata.jsonl  {'encoding': 'ascii', 'confidence': 1.0, 'language': ''}
mydataset.csv    {'encoding': 'UTF-8-SIG', 'confidence': 1.0, 'language': ''}

唯一有效并在 jsonl 文件中附加 csv 的组合是当我对 csv 文件使用encoding=unicode_escape 时,但在这种情况下。生成的 jsonl 显示数据如下:-

索引 4 之前是之前的数据,而从索引 120315 开始,显示的附加数据不匹配。请让我知道要修改我的代码中的哪些内容。

python json csv google-colaboratory codec
1个回答
0
投票

我很高兴你解决了这个问题。我什至不认为 JSON 文件可能是问题所在,并且完全错过了 chardet 对它是 ASCII 的评估。

将来当您遇到这样的问题时(我应该先问这个问题),准确地知道哪个文件有问题将会很有帮助。当您运行该程序并收到错误时,您可能会看到一个堆栈跟踪,它指向一条指示 JSON 文件的行,而不是 CSV 文件——我将您的问题解释为主要与此相关。

如果堆栈跟踪没有意义,并且您认为/知道多个文件之一有问题,请尝试添加一些代码以准确指出哪个文件有问题。由于您已经收到 UnicodeDecodeError 您可以尝试捕获该错误,例如:

try:
    with open(csv_file, 'r', encoding='utf-8-sig') as file:
        reader = csv.reader(file)
        data = [row[column_index] for row in reader]
except UnicodeDecodeError as e:
    print(f"couldn't decode {csv_file} with 'utf-8-sig': {e}")

...

并对 JSON 文件重复此操作。如果您碰巧遇到 UnicodeDecodeError 以外的其他错误,您将看到另一个堆栈跟踪错误组合,您可以专注于此...耶,调试!

我相信如果你这样做,你会得到非常明确的信息:

couldn't decode jsondata.jsonl with 'ascii': UnicodeDecodeError: 'utf-8' codec can't decode byte 0xdb in position 0: unexpected end of data

祝你好运!

© www.soinside.com 2019 - 2024. All rights reserved.