Python打开JSON/CSV文件的正确方式

news2024/9/24 9:23:14

前言

我们在使用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/1993391.html

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

相关文章

(el-Time-Picker)操作(不使用 ts):Element-plus 中 TimePicker 组件的使用及输出想要时间格式需求的解决过程

Ⅰ、Element-plus 提供的 TimePicker 时间选择器组件与想要目标情况的对比&#xff1a; 1、Element-plus 提供 TimePicker 组件情况&#xff1a; 其一、Element-ui 自提供的 TimePicker 代码情况为(示例的代码)&#xff1a; // Element-plus 提供的组件代码: <template>…

七、1 ADC模数转换器介绍+有关知识点

目录 1、介绍 &#xff08;1&#xff09;ADC&#xff0c;模拟信号转换为数字信号 &#xff08;2&#xff09;DAC和PWM&#xff0c;数字信号转换为模拟信号 &#xff08;3&#xff09;ADC的两个关键参数 &#xff08;4&#xff09; &#xff08;5&#xff09; &#xff08…

深度学习代码运行RuntimeError:No such operator torchvision::nms解决方案

RuntimeError: No such operator torchvision::nms解决方案 跑代码的时候碰到了"RuntimeError: No such operator torchvision::nms"&#xff0c;找到的资料显示大多是"torch"和"torchvision"版本不匹配&#xff0c;让二者版本一致即可解决。但我…

抱抱脸自动下载模型地址

HuggingFace模型自动下载找保存地址 问题&#xff1a;OSError: Incorrect path_or_model_id: THUDM/cogvlm2-llama3-chat-19B/model.safetensors.index.json. Please provide either the path to a local folder or the repo_id of a model on the Hub. 解决&#xff1a;MODEL_…

多叉树的深度优先遍历(以电话号码的字母组合为例)

在我们的座机上&#xff0c;都有这种数字与字母对应的按键。 以此为例&#xff0c;讲解多叉树的深度优先遍历 问题 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同…

奥运新项目带来新增长,小众运动攀岩相关商品成交额同比增长 160%

巴黎奥运会临近收官&#xff0c;中国健儿在乒乓球、网球、跳水、游泳等众多项目中表现出色&#xff0c;不仅吸引了全球目光&#xff0c;更在国内掀起了一股强劲的“奥运热”。抖音电商数据显示&#xff0c;7月20日-8月2日“热力先锋季”主题活动期间&#xff0c;抖音电商体育类…

“名字说我俩挺配的”:解锁姓名背后的神秘共鸣,带你玩转名字魔法!

引言&#xff1a;从姓名中挖掘灵魂共鸣 大家好&#xff0c;欢迎来到“姓名共鸣者”的世界&#xff01;不管你是想知道自己的名字和暗恋对象的名字有多配&#xff0c;还是好奇自己和某个历史人物之间的缘分&#xff0c;或者只是想找点乐子&#xff0c;“姓名共鸣者”都能满足你…

[qt] 数据库基本概念

一 数据和数据库 1.1 数据 数据可以是被计算机接受处理和处理的符号。可以有数字、文字、表格、图形、图像和声音等 1.2 数据库 顾名思义就是存放数据的仓库 1.2.1 特点 数据按照数据模型组织&#xff0c;是高度结构化的&#xff0c;可供多个用户共享并且具有一定的安全性…

视频怎么转换成mp3音频?视频转mp3音频的几个批量方法

视频怎么转换成mp3音频&#xff1f;在现代的工作场景中&#xff0c;多媒体文件的处理已经成为许多工作任务中不可或缺的一部分。特别是在处理视频和音频文件时&#xff0c;有时候需要将视频文件转换成MP3音频格式。这一操作不仅仅是简单的格式转换&#xff0c;更是为了适应不同…

微信小程序实现Canvas画板

这个小demo适用于 快递实名签收等业务逻辑 源码如下&#xff1a; js文件&#xff1a; Page({data: {ctx: "", // 保存 canvas 上下文pen: 5, // 画笔默认的宽度color: "#000", // 画笔默认的颜色},startX: 0, // 保存 X 坐标startY: 0, // 保存 Y 坐标o…

人在职场,格局越小,破事越多

人在职场&#xff0c;面对同样的琐碎、倾轧&#xff0c;有人处理得游刃有余&#xff0c;有人总是战战兢兢&#xff0c;表面上看起来&#xff0c;是能力水平的差别&#xff0c;归根究底&#xff0c;是格局的不同。 格局越小的人&#xff0c;眼里的破事越多&#xff1b;格局越大…

【限流与Sentinel超详细分析】

Sentinel 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件&#xff0c;主要以流量为切入点&#xff0c;从流量控制、熔断降级、系统自适应保护等多个维度来保障微服务的稳定性。 1 Sentinel 基本概念 资源…

OpenAI开发ChatGPT“反作弊神器”,99.9%超高命中率,还没上线

检查内容是否用了ChatGPT&#xff0c;准确率高达99.9%&#xff01; OpenAI又左右互搏上了&#xff0c;给AI生成的文本打水印&#xff0c;高达99.9&#xff05;准确率抓「AI枪手」作弊代写。其能够精准识别出论文或研究报告是否由ChatGPT撰写&#xff0c;甚至能追溯其使用的具体…

C++ | Leetcode C++题解之第328题奇偶链表

题目&#xff1a; 题解&#xff1a; class Solution { public:ListNode* oddEvenList(ListNode* head) {if (head nullptr) {return head;}ListNode* evenHead head->next;ListNode* odd head;ListNode* even evenHead;while (even ! nullptr && even->next…

VScode的环境编译器选择

按快捷键 Ctrl Shift P 选择即可

中国移动机顶盒【山东】魔百和CM201-2芯片HI3798MV300刷机过程、心得(朝歌代工)【免拆刷机】过程心得

中国移动【山东】魔百和CM201-2芯片HI3798MV300刷机过程、心得&#xff08;朝歌代工&#xff09;【免拆刷机】过程心得 先上主板图(虽然是【免拆刷机】但是为了防止刷机失败&#xff0c;建议大家拆一下对比一下主板是否一致&#xff09; 添加图片注释&#xff0c;不超过 140 字…

前端web开发HTML+CSS3+移动web(0基础,超详细)——第3天

目录 一&#xff0c;列表-无序和有序的定义列表 二&#xff0c;表格-基本使用与表格结构标签 三&#xff0c;合并单元格 四&#xff0c;表单-input标签 五&#xff0c;表单-下拉菜单 六&#xff0c;表单-文本域 七&#xff0c;表单-label标签 八&#xff0c;表单-按钮 …

git 如何把A仓库中的代码提交到B仓库分支

1. git clone A仓库代码到本地 首先将A仓库代码克隆到本地(地址为A仓库地址&#xff0c;替换自己的即可) git clone http://gitlab.cn/sourceA/A.git 2. 添加目标B仓库为远程仓库 git remote add target http://gitlab.cn/targentB/B.git 3. 查看当前远程仓库地址 git remo…

C++ --- std::array容器与std::vector容器的区别

std::array和std::vector的区别 一、内存管理和大小固定性二、性能三、功能特性四 、使用场景 在C中&#xff0c;array和vector都是用于存储一系列相同类型元素的容器&#xff0c;但它们之间存在几个关键的区别。这些区别主要体现在内存管理、大小固定性、性能以及功能特性等方…

18 数据在内存中的存储

目录 一、整数在内存中的存储 二、大小端字节序和字节序判断 &#xff08;一&#xff09;什么是大小端 &#xff08;二&#xff09;为什么会有大小端 &#xff08;三&#xff09;练习 1、设计一个小程序来判断当前机器的字节序 2、练习二 3、练习三 4、练习四 5、练习五…