深入 Python 文件操作:编码、读写与追加的全解析

news/2025/4/1 0:25:48/文章来源:https://www.cnblogs.com/FrostBoy/p/18799168

一、文件编码:计算机的 "语言翻译官"

在计算机世界中,所有数据最终都以0和1的二进制形式存储。但人类需要更直观的表示方式,文件编码就是连接二者的桥梁。

常见编码格式

  • ASCII:最早的单字节编码,仅支持英文和符号(128 个字符)
  • UTF-8:Unicode 的可变长编码,兼容 ASCII,支持全球语言(Python3 默认编码)
  • GBK:中文常用编码,双字节存储中文字符

Python 中的编码处理

当使用open()函数时,通过encoding参数指定编码:

# 读取UTF-8编码的文本
with open("data.txt", "r", encoding="utf-8") as f:content = f.read()# 写入GBK编码的文件
with open("output.txt", "w", encoding="gbk") as f:f.write("你好,世界!")

二、文件读取:从磁盘到内存的桥梁

基础操作模式

模式 说明 示例
r 只读(默认) open("file.txt", "r")
rb 二进制只读 open("image.png", "rb")
r+ 读写(指针从头开始) open("data.txt", "r+")

读取方法对比

1. 一次性读取全部内容

with open("log.txt", "r") as f:all_text = f.read()  # 适合小文件

2. 逐行读取(推荐大文件)

with open("large_file.txt", "r") as f:for line in f:  # 内存友好型方式print(line.strip())

3. 按字节读取二进制文件

with open("video.mp4", "rb") as f:chunk = f.read(1024)  # 每次读取1KBwhile chunk:process(chunk)chunk = f.read(1024)

三、文件写入:从内存到磁盘的持久化

写入模式详解

模式 说明 注意事项
w 覆盖写入(文件不存在则创建) 会清空原有内容
wb 二进制写入 用于图片、音频等非文本文件
w+ 读写模式(覆盖写入) 慎用,避免数据丢失

文本写入示例

# 写入多行文本
lines = ["第一行\n", "第二行\n", "第三行\n"]
with open("output.txt", "w") as f:f.writelines(lines)  # 比多次f.write更高效

二进制写入示例

# 保存图片数据
with open("download.jpg", "wb") as f:f.write(requests.get("https://example.com/image.jpg").content)

四、追加写入:数据的增量存储

追加模式a

使用a模式时,文件指针会指向末尾,新内容将添加到文件尾部:

# 追加日志信息
with open("app.log", "a") as f:f.write(f"[{datetime.now()}] 用户登录\n")

二进制追加模式ab

# 合并视频片段
with open("movie.mp4", "ab") as f:f.write(new_video_chunk)

五、最佳实践与注意事项

  1. 始终使用with语句:自动管理文件关闭,避免资源泄漏

  2. 明确指定编码:防止出现UnicodeDecodeError或乱码

  3. 模式组合技巧:

    • r+:读写模式(需手动控制指针位置)
    • a+:追加并读取(常用于日志分析)
  4. 异常处理

    try:with open("test.txt", "r") as f:content = f.read()
    except FileNotFoundError:print("文件不存在")
    except UnicodeDecodeError:print("编码错误,请检查文件格式")
    


细节决定成败!
个人愚见,如有不对,恳请斧正!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某客户RAID出现Multi-bit ECC error错误

某客户反馈,BMC带外有Major级别的告警,告警内容如下可以看出SEL指向RAID卡,产生告警时间为2024年11月14日。检查RAID卡日志,找2024年11月14号发生的事件。从RAID卡事件可以看出来RAID卡从2024年11月9号到2024年11月14号,5天内并没有记录任何日志(如下图)一直到2024年11月…

直播软件怎么开发,Redis触发扩容的两种情况

直播软件怎么开发,Redis触发扩容的两种情况1、如果没有fork子进程在执行RDB或者AOF的持久化,一旦满足ht[0].used >= ht[0].size,此时触发扩容;2、如果有fork子进程在执行RDB或者AOF的持久化时,则需要满足ht[0].used > 5 * ht[0].size,此时触发扩容。下面将结合源码…

怎么快速干净拆焊直插元件的方法成都承接电路板设计

我处提供优质的单片机、PLC、电路板、控制器/箱、仪器仪表、机电设备或系统、自动化、工控、传感、数据采集、自控系统、控制系统、物联网、电子产品、软件、APP开发设计定制服务(业务www点yonko-tech点com),在做项目的时候,拆除电路板上的元件也是有的事情,拆元件说难不难…

flutter:用http库下载文件

一,安装第三方库 地址: https://pub.dev/packages/http 编辑pubspec.yaml: dependencies:flutter:sdk: flutterpath_provider: ^2.1.5http: ^1.3.0 然后点击 pub get 二,代码: import package:flutter/material.dart; import package:http/http.dart show get; import packa…

flutter:从接口获取json数据后并解析

一,代码: dart代码:model class GoodsListItem {String name;String desc;int id;GoodsListItem(this.name,this.desc, this.id) {}GoodsListItem.fromJson(Map<String, dynamic>json):name=json["name"],desc = json["desc"],id = json["id&q…

图解 CSS 选择器

https://zhuanlan.zhihu.com/p/715717977CSS 选择器用于选择 HTML 元素并将样式应用于它们。使用这些选择器,可以定义特定条件下应用哪些样式。除了普通的选择器外,还有伪类和伪元素,用于选择具有特定状态或特定部分的元素,并将样式应用于它们。本文将通过图文并茂的方式展…

二分图学习笔记

使用题单:二分图 - 从入门到入土。 二分图概念 对于一个图,如果能够把它的点集恰好分成两个部分,使得这第一个部分里面的点两两不连边,第二个部分里面的点也两两不连边,则该图是二分图。或者说每一条边都横跨了两个集合。 举个例子:这个图是二分图,因为我们可以将它分成…

SciTech-EECS-Signal-OpAmp(Operational Amplifier,运算放大器): Gain增益放大倍数计算公式 + 分流器采样百安级大电流的微电压信号 + 微电压信号放大

SciTech-EECS-Signal-OpAmp(Operational Amplifier,运算放大器): Gain增益放大倍数计算公式## 分流器采样百安级大电流的微电压信号 OpAmp(运算放大器)微电压信号放大 如上图所示,\(\large V_{out} = V_{in} \times (1+ \dfrac{R_{2}}{R_{1}})\) TL431+MOS管,充满自停的充电器…

读DAMA数据管理知识体系指南34数据仓库和商务智能概念

读DAMA数据管理知识体系指南34数据仓库和商务智能概念1. 业务驱动因素 1.1. 主要驱动力是运营支持职能、合规需求和商务智能活动 1.2. 用数据来证明他们是合规的,因为数据仓库中包含历史数据,所以经常被用来响应这类要求 1.3. 商务智能支持一直是建设数据仓库的主要原因 2. 目…

环境检测 温湿度 噪声 建大仁科

环境检测 温湿度 噪声 建大仁科 1、温湿度 wifi版本 配置软件2、噪声 wifi 版本 配置软件 android手机上安装 蓝牙连接配置3、平台下载 RS-RJ-K监控平台-平台软件-温湿度传感器产品说明书下载及选型erwa.cn 二娃测试备忘

C# 13 中的新增功能实操

前言 今天大姚带领大家一起来看看 C# 13 中的新增几大功能,并了解其功能特性和实际应用场景。 前提准备 要体验 C# 13 新增的功能可以使用最新的 Visual Studio 2022 版本或 .NET 9 SDK 尝试这些功能。 Visual Studio 2022安装https://visualstudio.microsoft.com/zh-hans/dow…

Open R1 项目进展第一期

DeepSeek R1 发布已经两周了,而我们启动 open-r1 项目——试图补齐它缺失的训练流程和合成数据——也才过了一周。这篇文章简单聊聊:Open-R1 在模仿 DeepSeek-R1 流程和数据方面的进展 我们对 DeepSeek-R1 的认识和相关讨论 DeepSeek-R1 发布后社区搞出来的有趣项目这既是项目…