建设网站目的,上海住房城乡建设部网站,初创公司 建网站,网站开发的挑战前言
我们在使用python的过程中#xff0c;经常需要它完成一些数据处理的工作#xff0c;其中尤以json/csv文件为常见。今天#xff0c;博主针对UnicodeDecodeError异常进行试验#xff0c;因为这个是新手最容易犯错的地方。 Q#xff1a;如何应对 UnicodeDecodeError 读…前言
我们在使用python的过程中经常需要它完成一些数据处理的工作其中尤以json/csv文件为常见。今天博主针对UnicodeDecodeError异常进行试验因为这个是新手最容易犯错的地方。 Q如何应对 UnicodeDecodeError 读取 .csv 或 .json 文件时我们可能会遇到诸如 gbk codec cant decode byte xx: illegal multibyte sequence 或 incomplete multibyte sequence。通过直觉判断是字符编码的问题那么又该如何解决 一、csv文件
1. 现场还原
我们读csv文件时有两种方式
1.1 使用pathlib
from pathlib import Pathpath Path(123.csv)
# 读取所有行
rows path.read_text().splitlines()
print(rows)
1.2 使用csv库
import csvf open(123.csv)
reader csv.reader(f, delimiter,)
# 第一种方法遍历reader
rows [row for row in reader]
print(rows)# 第二种方法遍历reader
rows enumerate(reader)
for index, row in rows:# 按索引返回每行默认是list需通过row[0]完成数据获取,tt为每列分隔符print(index, row[0].split(tt))
上述两种方式均支持对csv文件进行数据解析。但是问题在于未指定字符编码所以两种方式均会提示该异常如下图所示 2. 正确方式
2.1 使用pathlib
from pathlib import Pathpath Path(123.csv)
# 读取所有行并且指定字符编码
rows path.read_text(encodingutf-8).splitlines()
print(rows)需要注意的是我们在使用pathlib时在Path()中也可以指定encodingutf-8但是很遗憾会获得一个warning并且并不会产生期望的结果 DeprecationWarning: support for supplying keyword arguments to pathlib.PurePath is deprecated and scheduled for removal in Python 3.14
形如
# 定义字符编码无效直接放弃path Path(123.csv, encodingutf-8)2.2 使用csv标准库
import csvf open(123.csv, encodingutf-8)
reader csv.reader(f, delimiter,)
# # 第一种方法遍历reader
rows [row for row in reader]
print(rows)# 第二种方法遍历reader
rows enumerate(reader)
for index, row in rows:# 按索引返回每行默认是list需通过row[0]完成数据获取,tt为分隔符print(index, row[0].split(tt))通过指定encoding实现处理时的字符编码与文件保持一致可以避免不必要的犯错。总之一句话“养成好习惯学习美又欢”。
二、json文件
我们在读取json文件时也会遇到该问题这里博主直接贴正确的写法
import json# 同csv一样指定encoding
f open(data.json, encodingutf-8)
# 将json字符串转为json对象
data_obj json.loads(f.read())
# 根据key, 返回value
print(fcredit_code is: {data_obj[credit_code]})# 将json对象转为字符串
data_str json.dumps(data_obj, indent4)
print(ftype is: {type(data_str)})
运行结果如下
结语
针对UnicodeDecodeError博主提供了错误和正确的示例相信能够从中获取一些帮助。