Python基础:文件读写完全指南

张开发
2026/5/4 12:36:37 15 分钟阅读
Python基础:文件读写完全指南
Python基础文件读写完全指南掌握数据持久化的核心技能前言文件操作是编程中不可或缺的技能——无论是读取配置文件、处理日志、还是保存用户数据都离不开文件的读写。Python提供了简洁而强大的文件操作接口让开发者能够轻松地与文件系统交互。本文将系统讲解文件读写的原理、各种模式和最佳实践帮助你安全高效地处理文件IO任务。一、文件操作基础1.1 核心概念Python使用内置的open()函数进行文件操作它返回一个文件对象也称为文件描述符。现代操作系统不允许程序直接操作磁盘所有文件操作都需要通过操作系统提供的接口来完成。1.2 基本语法# 基本语法fopen(file_path,mode,encoding)# 示例打开一个文本文件fopen(/path/to/file.txt,r)# r 表示读取模式二、读取文件2.1 打开文件与异常处理如果文件不存在会抛出FileNotFoundError异常try:fopen(/path/to/nonexistent.txt,r)exceptFileNotFoundErrorase:print(f文件不存在:{e})2.2 读取方法汇总方法说明适用场景read()一次性读取全部内容小文件read(size)按指定大小读取大文件分块处理readline()读取一行逐行处理readlines()读取所有行到列表需要多行同时处理# 一次性读取全部内容withopen(file.txt,r)asf:contentf.read()# 按指定大小读取适合大文件withopen(large_file.txt,r)asf:whileTrue:chunkf.read(1024)# 每次读取1024字节ifnotchunk:breakprocess(chunk)# 逐行读取withopen(file.txt,r)asf:linef.readline()whileline:print(line.strip())linef.readline()# 读取所有行到列表withopen(file.txt,r)asf:linesf.readlines()forlineinlines:print(line.strip())2.3 安全关闭文件使用文件后必须关闭以释放系统资源# 手动关闭fopen(file.txt,r)contentf.read()f.close()# 必须手动关闭推荐使用with语句自动管理# with语句会自动关闭文件withopen(/path/to/file.txt,r)asf:contentf.read()# 文件会在代码块结束后自动关闭为什么用withwith语句会在代码块执行完毕后自动关闭文件即使发生异常也会正确处理避免资源泄漏。三、文件对象类型3.1 文本文件 vs 二进制文件模式说明示例文本模式默认处理文本文件会进行编码转换open(file.txt, r)二进制模式处理图片、视频等二进制文件open(image.jpg, rb)3.2 内存中的文件对象file-like对象fromioimportStringIO,BytesIO# 内存中的文本文件text_streamStringIO(一些文本内容)contenttext_stream.read()# 内存中的二进制文件binary_streamBytesIO(b\x00\x01\x02)databinary_stream.read()四、处理不同编码对于非UTF-8编码的文本文件需要指定编码# 读取GBK编码文件withopen(gbk_file.txt,r,encodinggbk)asf:contentf.read()# 处理编码错误忽略非法字符withopen(file.txt,r,encodingutf-8,errorsignore)asf:contentf.read()常见编码参数编码说明utf-8默认编码推荐使用gbk中文Windows系统常用latin-1西欧语言编码五、写入文件5.1 写入模式# 覆盖写入文件不存在则创建withopen(output.txt,w)asf:f.write(Hello, World!)# 追加写入withopen(output.txt,a)asf:f.write(\nAnother line)5.2 写入多行内容lines[第一行,第二行,第三行]# 方法1逐行写入withopen(output.txt,w)asf:forlineinlines:f.write(f{line}\n)# 方法2使用 writelineswithopen(output.txt,w)asf:f.writelines(f{line}\nforlineinlines)六、文件模式总结模式描述文件指针位置r读取默认文件开头w写入覆盖文件开头清空原内容x独占创建文件存在则失败文件开头a追加文件末尾b二进制模式与上述模式组合t文本模式默认与上述模式组合更新读写取决于使用的模式组合示例# 二进制读取withopen(image.jpg,rb)asf:dataf.read()# 读写模式覆盖withopen(file.txt,w)asf:f.write(Hello)f.seek(0)# 移动指针到开头contentf.read()# 读写模式追加withopen(file.txt,a)asf:f.write(New line)f.seek(0)contentf.read()七、最佳实践7.1 五个核心原则原则说明示例使用with语句自动管理文件资源with open(...) as f:处理大文件用迭代逐行读取内存友好for line in f:明确指定编码避免编码错误encodingutf-8检查文件存在性避免异常os.path.exists()处理异常捕获IO错误try...except7.2 大文件处理示例# 内存友好的逐行处理withopen(large_file.txt,r,encodingutf-8)asf:forlineinf:# 不会一次性加载整个文件到内存process(line)# 逐行处理7.3 安全检查示例importosdefsafe_read_file(filepath):安全读取文件内容ifnotos.path.exists(filepath):print(f文件不存在:{filepath})returnNonetry:withopen(filepath,r,encodingutf-8)asf:returnf.read()exceptPermissionError:print(f没有权限读取文件:{filepath})returnNoneexceptExceptionase:print(f读取文件时发生错误:{e})returnNone八、综合练习读取系统时区文件fpath/etc/timezone# Linux系统时区文件路径try:withopen(fpath,r,encodingutf-8)asf:timezonef.read().strip()print(f系统时区:{timezone})exceptFileNotFoundError:print(时区文件不存在)exceptPermissionError:print(没有权限读取时区文件)exceptExceptionase:print(f发生未知错误:{e})文件复制示例defcopy_file(src,dst):复制文件支持大文件try:withopen(src,rb)assource:withopen(dst,wb)astarget:# 分块复制避免内存占用过大whileTrue:chunksource.read(8192)# 8KB块ifnotchunk:breaktarget.write(chunk)print(f文件复制成功:{src}-{dst})exceptExceptionase:print(f复制失败:{e})# 使用示例copy_file(source.jpg,destination.jpg)九、总结知识点要点打开文件open()返回文件对象指定模式和编码读取方式read()、readline()、readlines()、迭代器写入方式write()、writelines()安全关闭with语句自动管理文件模式r/w/a/b/组合使用编码处理明确指定encoding处理errors大文件分块读取或逐行迭代异常处理捕获FileNotFoundError、PermissionError等掌握文件操作是Python编程的基础技能。通过合理选择读写模式、使用with语句自动管理资源、正确处理编码和异常你可以写出健壮高效的文件处理代码。— Python 学习不走弯路体系化实战路线基础语法 · 异步Web开发 · 数据采集 · 计算机视觉 · NLP · 大模型RAG实战—— 全在「道满PythonAI」相关推荐阅读Python官方文档 - 文件IOPython官方文档 - io模块PEP 343 – The “with” Statement如果这篇文章对你有帮助欢迎点赞、评论、收藏你的支持是我持续分享的动力

更多文章