0

0

Python怎么打开文件_open()函数与r/w/a读写模式详解

P粉602998670

P粉602998670

发布时间:2026-03-13 02:15:29

|

215人浏览过

|

来源于php中文网

原创

open()默认只读模式,写操作需显式指定'w'或'a'等模式,路径用正斜杠或原始字符串,必须指定encoding参数,资源管理推荐with语句。

python怎么打开文件_open()函数与r/w/a读写模式详解

open() 函数默认是只读模式,不加参数就报错写操作

很多人一上来就 open('data.txt', 'w').write('hi'),发现文件空了却没报错;或者用 open('data.txt') 直接调 .write(),结果抛出 io.UnsupportedOperation: not writable。这是因为 open() 默认模式是 'r'(只读),任何写入都会失败。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 显式写出模式,别依赖默认值——open('log.txt', 'a')open('log.txt') 更安全、更可读
  • 'w' 会清空原文件,'a' 才是“追加”的真实含义:光标自动移到末尾,且不会覆盖已有内容
  • 二进制模式必须显式声明:'rb' / 'wb',混用文本和二进制模式(比如用 'w' 写 bytes)会直接报 TypeError

中文路径或含空格的文件名导致 FileNotFoundError

在 Windows 上用 open('C:\Users\name\文档\test.txt') 经常报错,不是因为路径不存在,而是反斜杠 \ 被当转义字符处理了——\d\t 都会被解释成特殊字符,最终路径根本不对。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 统一用正斜杠:open('C:/Users/name/文档/test.txt'),Python 全平台兼容
  • 或用原始字符串:open(r'C:\Users\name\文档\test.txt'),开头加 r
  • 路径拼接别手拼,用 os.path.join() 或更推荐的 pathlib.Path()Path('data') / 'raw' / 'input.csv'

忘记 close() 或异常后文件句柄泄漏的真实影响

你可能试过 f = open('x.log'); f.write('ok'); f.close(),但一旦中间出错(比如磁盘满、权限不足),f.close() 就不会执行。后果不是“文件打不开”,而是系统级资源耗尽:Linux 下单进程默认最多打开 1024 个文件,开几百个没关的 open(),后续所有 open() 都会报 OSError: [Errno 24] Too many open files

Yodayo
Yodayo

一个专为动漫迷和vTuber打造的AI艺术创作平台、交流社区

下载

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 无条件用 with open(...) 语句,哪怕只是读一行:with open('cfg.json') as f: data = json.load(f)
  • 不要在函数里返回 open() 返回的文件对象让调用方关——责任边界模糊,极易漏关
  • 调试时怀疑句柄泄漏,Linux/macOS 可用 lsof -p $(pgrep -f your_script.py) 查看进程打开了哪些文件

编码错误:UnicodeDecodeError 和乱码的根本区别

UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 这类报错,90% 是因为用系统默认编码(Windows 是 gbk)去读一个 UTF-8 编码的文件。反过来,用 UTF-8 写中文到文件,却不声明 encoding='utf-8',在某些环境(比如旧版 IDLE 或某些终端)里会静默失败或输出乱码。

实操建议:

立即学习Python免费学习笔记(深入)”;

  • 只要文件含中文或非 ASCII 字符,open() 必须带 encoding 参数:open('notes.txt', encoding='utf-8')
  • 写文件时也指定编码,避免依赖 locale:open('out.csv', 'w', encoding='utf-8-sig')-sig 防 Excel 打开乱码)
  • 不确定源文件编码?先用 chardet 库探测:chardet.detect(open('old.txt', 'rb').read())['encoding']

文件操作看着简单,但编码、路径、资源管理、模式语义这四块,每一块都卡在“运行时不报错,行为不符合预期”的灰色地带。尤其在跨平台协作或部署到服务器时,这些点比语法错误更难定位。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

457

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

547

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

335

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1567

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

649

2023.11.24

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号