Python打开JSON/CSV文件的正确方式(针对UnicodeDecodeError)

news2024/9/27 8:18:10

前言

我们在使用python的过程中,经常需要它完成一些数据处理的工作,其中尤以json/csv文件为常见。今天,博主针对UnicodeDecodeError异常进行试验,因为这个是新手最容易犯错的地方。

在这里插入图片描述

Q:如何应对 UnicodeDecodeError

读取 .csv 或 .json 文件时,我们可能会遇到诸如: 'gbk' codec can't decode byte xx: illegal multibyte sequence 或 incomplete multibyte sequence。通过直觉判断是字符编码的问题,那么又该如何解决?

一、csv文件

1. 现场还原

我们读csv文件时,有两种方式:

1.1 使用pathlib
from pathlib import Path

path = Path("123.csv")
# 读取所有行
rows = path.read_text().splitlines()
print(rows)

1.2 使用csv库
import csv

f = 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 Path

path = Path("123.csv")
# 读取所有行,并且指定字符编码
rows = path.read_text(encoding="utf-8").splitlines()
print(rows)

需要注意的是,我们在使用pathlib时,在Path()中也可以指定encoding="utf-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", encoding="utf-8")
2.2 使用csv标准库
import csv

f = open("123.csv", encoding="utf-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", encoding="utf-8")
# 将json字符串转为json对象
data_obj = json.loads(f.read())
# 根据key, 返回value
print(f"credit_code is: {data_obj["credit_code"]}")

# 将json对象转为字符串
data_str = json.dumps(data_obj, indent=4)
print(f"type is: {type(data_str)}")

运行结果如下:
在这里插入图片描述

结语

针对UnicodeDecodeError,博主提供了错误和正确的示例,相信能够从中获取一些帮助。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1985431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware 设置开机自启动虚拟机

1.虚拟机vmx文件的存储路径 2.快捷键图标,右键–>属性–>快捷方式 3.目标命令里填充 -x “vmx路径” 4.点击:应用–>确定 5.“win键R” 输入shell:startup 6.将启动快捷键复制粘贴到里面

8.6 字符串中等 481 Magical String 522 Longest Uncommon Subsequence II

481 Magical String 像之前那个base ,首先对magic string做出分析,才能够分析这道题的规律 读题: //magic string仅包含1 2 并遵循 //串联字符串中 ‘1’ 和 ‘2’ 的连续出现次数可以生成该字符串。concatenating 字符串中的 1 2 contiguous…

java学习--线程基础

概念 程序 进程 线程 单线程与多线程 并发与并行 线程基本使用 基成Tread类 关系图 /* author:我与java相爱相杀---c语言梦开始的地方 今天又是努力学习的一天!!!! */public class Main {public static void main(String[] args…

【Android Git】Android项目版本由SVN变成Git

前言 在Android开发环境中,vcs.xml 文件通常与版本控制系统(VCS,Version Control System)有关,这个文件保存了与版本控制系统相关的配置信息。 以下是 vcs.xml 文件的一些关键点: 版本控制配置&#xff…

Cryptomator-保护你云端上的隐私

网盘为我们提供了随时随地的获取数据的便利性,同时也大大减轻了你我手机电脑空间不足的压力。但是一旦我们选择使用网盘,也意味着把你的私密数据交出去了。 对于公共资料来说,无非就是提供网盘服务的公司知道了你做了保存这些资料的行为而已…

提升用户体验的秘诀:Xinstall带你玩转Web拉起App!

在移动互联网时代,App已成为我们日常生活中不可或缺的一部分。然而,随着App数量的激增,如何让用户更便捷地触达和使用App,成为了开发者和运营者面临的一大挑战。今天,我们就来揭秘一个能够一键实现Web拉起App的神器——…

类和对象(下)C++

1.初始化列表 1.为什么有初始化列表,它的作用? ->初始化列表,是构造函数初始化的另一种形式。 ->在语法上面理解,初始化列表可以认定为是每个成员变量定义初始化的地方. ->引用成员变量,const成员变量&am…

100个免费可商用图库,一次收藏,众生受益

正版图片太贵 免费图片又有风险 免费可商用图片才是设计师心头所好 (当然,土豪除外) 以下100个免费可商用图库 一次收藏,众生受益! skr~skr~skr~ 1、Unsplash https://unsplash.com/ 建…

6个免费的无损音乐下载网站,建议收藏!

分享6个免费的无损音乐下载网站,都是免费的音乐资源,国内外各种风格的音乐都能找到! MyFreeMP3 tools.liumingye.cn/music/ 一个免费的mp3音乐下载网站,里面有丰富的音乐资源,支持在线听歌,也可以下载歌…

找出电脑中的视频文件并把地址输出在记事本文件中,同理通过bat脚本找出需要的其他后缀文件,比如word文件excel文件md文件等

下午的时候,突然很着急,要找到一个之前下载的一个视频文件,我记得是mp4格式的视频文件,但是具体叫什么名字不记得了,更不记得在哪个目录下,所以想了一个办法,通过bat脚本命令,找到所…

Hack The Box-Resource【更新中】

总体思路 信息收集&端口利用 nmap -sSVC itrc.ssg.htb目标开放了两个ssh端口和一个80端口,先查看80端口 网站是一个SSG IT资源中心,主要用于解决网站问题、管理 SSH 访问、清除病毒和解决各种安全问题的权威一站式商店。 后台挂着目录扫描&#x…

threejs加载fbx带tga贴图报错

描述:threejs加载带tga贴图的fbx时,提示 FBXLoader: TGA loader not found, creating placeholder texture for 11\Pylons_A.TGA 方案一: 加载fbx之前,在LoadingManager中添加TGALoader。此方案有两个前提 1、FBXLoader和TGALoa…

JDK-Java IO流概述

JDK-Java IO流概述 概述 一直以来Java三件套(集合、io、多线程)都是最热门的Java基础技术点,我们要深入掌握好这三件套才能在日常开发中得心应手,之前有编写集合相关的文章,这里出一篇文章来梳理一下io相关的知识点。 …

电商客服的贴心快捷回复助手

作为一位电商客服,你是否曾在回复顾客的过程中感到困扰?是否因为经验不足而踩过雷,比如被平台提示用了违禁词,或是不清楚平台的响应率和满意度等问题?如果是这样,那么今天我要向大家介绍一款神奇的软件&…

小白学算法之移除元素(双指针法!)

力扣27:移除元素 题目内容: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。 元素…

使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-游戏存储(结束!)

文章目录 分数储存写在最后 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击(一) 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-激光组件(二) 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-飞船动画&#xff08…

制造知识普及(二)--企业内部物料编码(IPN)与制造商物料编码(MPN)

在日常的物料管理业务逻辑中,一物一码是物料管理的基本的业务规则,不管物料从产品开发还是仓库管理,甚至成本核算,都要遵循这个原则,才能保证产品数据的准确性,才具备唯一追溯的可行性。大部分企业都是这种…

OFD 发票解析

文章目录 参考文章1 了解ofd文件结构1.1 如何打开ofd 文件1.2 ofd文件结构1.3 提取信息思路 2. 提取发票信息实现2.1 目录结构2.2 实体类2.3 发票解析类2.4 controller2.5 service 参考文章 ofd发票解析 什么是ofd格式 ofd 格式是一种用于存储金融数据的开放格式,它…

SpringBoot3 配置Logback日志滚动文件

简介 本文介绍了在SpringBoot3中配置Logback日志滚动文件的方法&#xff0c;因为SpringBoot3内置的logback版本是1.4.14&#xff0c;之前使用SpringBoot2.1.5的logback配置发现有些东西不能生效了 环境 SpringBoot v3.3.2 内置的logback-core为1.4.14 正文 <configuration …