【Python入门三】正确理解和使用文件编码

目录

  • 1. 文件编码概述
    • 1.1 什么是文件编码?
    • 1.2 Python 的编码处理
  • 2. 文件编码相关操作
    • 2.1 常见文件读写操作
    • 2.2 常见编码转换
  • 3. 常用的编码库和工具
    • 3.1 Python 内置功能
    • 3.2 第三方库
  • 参考

在 Python 中,文件编码是一个非常重要的话题,特别是在处理文本文件时,了解和正确设置文件编码可以避免常见的编码错误(如 UnicodeDecodeError 或 UnicodeEncodeError)。以下是 Python 文件编码的概述以及相关库和工具的介绍。

1. 文件编码概述

1.1 什么是文件编码?

文件编码是将字符映射为字节序列的方式。不同的编码方式决定了文件中字符的存储格式。常见的文件编码包括:

  • ASCII:最早的编码标准,支持 128 个字符(英文字母、数字、符号)。
  • UTF-8:一种变长编码,兼容 ASCII,广泛用于国际化应用。
  • UTF-16/UTF-32:固定长度或变长的 Unicode 编码,适合需要高效支持多语言的场景。
  • GBK/GB2312/GB18030:中文编码标准,主要用于简体中文环境。
  • ISO-8859-1:一种单字节编码,支持西欧字符。

1.2 Python 的编码处理

默认编码:Python 3 默认使用 UTF-8 编码,而 Python 2 默认使用 ASCII(Python 2 已不推荐使用)。

文件头声明:在 Python 源文件中,可以通过文件头声明指定编码:

# -*- coding: utf-8 -*-

这告诉解释器用 UTF-8 解码源代码文件。

字符串类型:
Python 3 中的字符串是 Unicode(str 类型)。
字节数据是专门的 bytes 类型。

2. 文件编码相关操作

2.1 常见文件读写操作

读取文件中的编码文本

# 使用 open() 指定编码读取文件
with open("example.txt", "r", encoding="utf-8") as f:content = f.read()print(content)

写入文件并指定编码

# 使用 open() 指定编码写入文件
with open("example.txt", "w", encoding="utf-8") as f:f.write("这是一个测试文本")

2.2 常见编码转换

将 Unicode 转换为字节

text = "这是一个测试"
# 编码为字节(UTF-8 格式)
encoded_text = text.encode("utf-8")
print(encoded_text)  # 输出: b'\xe8\xbf\x99\xe6\x98\xaf\xe4\xb8\x80\xe4\xb8\xaa\xe6\xb5\x8b\xe8\xaf\x95'

将字节解码为 Unicode

# 将字节解码回字符串
decoded_text = encoded_text.decode("utf-8")
print(decoded_text)  # 输出: 这是一个测试

转换文件的编码

# 将文件从 GBK 转换为 UTF-8
with open("gbk_file.txt", "r", encoding="gbk") as f:content = f.read()with open("utf8_file.txt", "w", encoding="utf-8") as f:f.write(content)

3. 常用的编码库和工具

3.1 Python 内置功能

open() 函数
从 Python 3 开始,open() 支持直接通过 encoding 参数指定文件编码。
常见编码值:“utf-8”, “gbk”, “latin-1”, “ascii”, “utf-16”, “utf-32”

codecs 模块
提供编码、解码和文件操作的底层支持。
示例:

import codecs# 使用 codecs 打开文件并指定编码
with codecs.open("example.txt", "r", "utf-8") as f:content = f.read()print(content)

str.encode() 和 bytes.decode()
对字符串进行编码或字节解码。

3.2 第三方库

chardet
检测文件或字节流的编码。适用于自动判别未知编码的文本。
安装:

pip install chardet

使用示例:

import chardet# 检测字节数据的编码
with open("unknown_file.txt", "rb") as f:raw_data = f.read()result = chardet.detect(raw_data)print(result)  # 输出: {'encoding': 'utf-8', 'confidence': 0.99}

参考

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

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

相关文章

SpringBoot 运行发生异常:java: 错误: 不支持发行版本 5

一、异常: 二、原因: 本地运行用的是JDK17,报错应该是项目编译配置使用的Java版本不对,需要检查一下项目及环境使用的Java编译版本配置。 三、解决:

2024.12.2——[极客大挑战 2019]Secret File 1

知识点:抓包 代码审计 filter伪协议 一、解题步骤 step 1 查看源代码中的信息 查看源代码发现一个php文件:[./Archive_room.php](http://72df1f22-85bf-47bb-b23a-efcaf88701d4.node5.buuoj.cn:81/Archive_room.php) 点进去后发现没什么用&#xff0c…

MKS EDGE Series RF Generators Power Solution 软件

MKS EDGE Series RF Generators Power Solution 软件

【汇编语言】标志寄存器(一) —— 标志寄存器中的标志位:ZF、PF、SF、CF、OF 一网打尽

前言 📌 汇编语言是很多相关课程(如数据结构、操作系统、微机原理)的重要基础。但仅仅从课程的角度出发就太片面了,其实学习汇编语言可以深入理解计算机底层工作原理,提升代码效率,尤其在嵌入式系统和性能优…

【C++】priority_queue优先队列

大家好,我是苏貝,本篇博客带大家了解C的string类的priority_queue优先队列,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️ 目录 1. 介绍2. 仿函数(A) 介绍(B) 控制比较逻辑 3. priority_queue和…

Python3 operator 模块

Python2.x 版本中,使用 cmp() 函数来比较两个列表、数字或字符串等的大小关系。 Python 3.X 的版本中已经没有 cmp() 函数,如果你需要实现比较功能,需要引入 operator 模块,适合任何对象,包含的方法有: o…

短视频矩阵系统开发|技术源代码部署

短视频矩阵系统通过多账号运营管理、多平台视频智能分发等功能,助力企业实现视频引流、粉丝沉淀和转化。 短视频矩阵系统是一种创新的营销工具,它整合了多账号管理、视频智能分发、数据可视化等多种功能,为企业在短视频领域的发展提供了强大…

YOLOV11 快速使用教程

概述 这里主要记录使用NVIDIA GPU pytorch 检测系列模型的快速使用方式,可以快速解决一些工业应用的问题,比如:无网、数据大需要改路径、需要记录不同实验结果等问题。 安装 参考官网,自己安装好Python > 3.8和pytorch >…

git修改某次commit(白痴版)

第一步 在bash窗口运行 git rebase --interactive commitId^ 比如要改的commitId是 abcedf git rebase --interactive abcedf^键盘 按 i 或者 ins 进入编辑状态 进入insert 编辑状态 在bash窗口手动把对应commit前面的pick改为e或edit 按 esc 进入退出程序 输入 :wq 保存退出…

AI 建站:Durable

网址:https://app.durable.co 步骤 1) 登录 2)点击创建新业务 3)填写信息后,点击创建 4)进入业务 5)生成网站 6)生成完成后不满意的话可以自己调整 7)点击保存 8)发布 …

网络原理之 TCP 协议

目录 1. TCP 协议格式 2. TCP 原理 (1) 确认应答 (2) 超时重传 (3) 连接管理 a) 三次握手 b) 四次挥手 (4) 滑动窗口 (5) 流量控制 (6) 拥塞控制 (7) 延时应答 (8) 捎带应答 3. TCP 特性 4. 异常情况的处理 1) 进程崩溃 2) 主机关机 (正常流程) 3) 主机掉电 (…

Python爬虫之selenium库驱动浏览器

目录 一、简介 二、使用selenium库前的准备 1、了解selenium库驱动浏览器的原理 (1)、WebDriver 协议 (2)、 浏览器驱动(Browser Driver) (3)、 Selenium 客户端库 &#xff0…

Vite+Vue3项目实战:组件化开发与通信指南

一、典型的ViteVue3项目结构 续上文成功创建Vue3项目的脚手架,通过visual Studio Code软件打开刚刚创建的文件夹,将会看到这样一个项目结构。 使用Vite构建Vue3项目时,项目结构通常遵循一定的组织规则,以保持代码的清晰和可维护性…

汽车免拆案例 | 2007款宝马650i车发动机偶尔无法起动

故障现象 一辆2007款宝马650i车,搭载N62B48B发动机,累计行驶里程约为26万km。车主反映,发动机偶尔无法起动,故障频率较低,十几天出现1 次,且故障出现时起动机不工作。 故障诊断  接车后试车,…

团队管理中如何做好目标管理

团队管理中的目标管理是确保团队高效运行的核心要素之一。 在目标管理中,清晰的目标设定、合理的资源分配、实时的跟踪与反馈机制是成功的关键。首先,设定SMART目标(具体、可衡量、可达成、相关性强、时间限定)能够有效聚焦团队的…

【力扣热题100】—— Day4.反转链表

你不会永远顺遂,更不会一直年轻,你太安静了,是时候出发了 —— 24.12.2 206. 反转链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出&…

【AWS re:Invent 2024】一文了解EKS新功能:Amazon EKS Auto Mode

文章目录 一、为什么要使用 Amazon EKS Auto Mode?二、Amazon EKS自动模式特性2.1 持续优化计算成本2.2 迁移集群操作2.3 EKS 自动模式的高级功能 三、EKS Auto 集群快速创建集群配置四、查看来自 API 服务器的指标五、EKS 相关角色权限设置六、参考链接 一、为什么…

记事本建java及java命名规范

1.桌面开发:c# 2. 记事本建java: 以class的名称(类名)为名,名称.java 编译jdk:javac 名称.java 调动运行jre : java 名称 查看名称.java里面的内容:cat 名称.java java 的命名规范 大驼峰(每个单词首…

过程管理系统(源码+文档+部署+讲解)

本文将深入解析“过程管理系统”的项目,探究其架构、功能以及技术栈,并分享获取完整源码的途径。 系统概述 过程管理系统是一款专为工业设计的综合管理平台,旨在通过集成各种管理流程和功能模块来提高管理效率和安全性。系统提供了从登录系…

期权懂|个股期权交割操作流程是什么样的?

期权小懂每日分享期权知识,帮助期权新手及时有效地掌握即市趋势与新资讯! 个股期权交割操作流程是什么样的? 一、行权申报: 期权买方在行权日通过其经纪商提交行权指令,表明其决定行使期权权利。 二、行权匹配&#xf…