尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Python 文件读写操作完全指南

Python 文件读写操作完全指南 1. 引言在 Python 编程中文件操作是一项基础且至关重要的技能。无论是读取配置文件、处理日志数据还是将程序结果持久化保存都离不开对文件的读写。Python 通过内置的open()函数和文件对象提供了一套简洁而强大的文件操作接口。本文将系统性地介绍 Python 文件读写的基本操作、常用模式、最佳实践以及处理大文件的技巧帮助你从入门到精通。2. 打开文件open() 函数一切文件操作都始于open()函数。它的基本语法如下file_objectopen(file_path,moder,encodingNone)参数详解file_path: 文件路径可以是相对路径或绝对路径。mode: 打开模式决定了文件的打开方式读、写、追加等。encoding: 指定文件的编码格式如utf-8处理中文文本时尤为重要。重要提示操作完成后务必使用file_object.close()关闭文件以释放系统资源。更推荐使用with语句进行自动管理见下文。3. 文件打开模式mode参数是文件操作的核心常用模式如下模式描述文件不存在时r只读默认。从文件开头读取。抛出FileNotFoundErrorw只写。创建新文件或清空已有文件内容。创建新文件a追加。在文件末尾写入不覆盖原有内容。创建新文件r读写。可读可写文件指针在开头。抛出错误w读写。创建新文件或清空已有文件然后可读可写。创建新文件a读写。可读可写文件指针在末尾写操作为追加。创建新文件文本与二进制模式上述模式默认处理文本文件如.txt,.py。处理图片、视频等非文本文件时需在模式后加b如rb,wb。4. 读取文件内容打开文件后有多种方法读取内容。4.1 一次性读取全部内容withopen(example.txt,r,encodingutf-8)asf:contentf.read()# 读取整个文件为一个字符串print(content)4.2 逐行读取withopen(example.txt,r,encodingutf-8)asf:forlineinf:# 文件对象是可迭代的print(line,end)# line 已包含换行符4.3 读取所有行到列表withopen(example.txt,r,encodingutf-8)asf:linesf.readlines()# 返回包含每行内容的列表forlineinlines:print(fLine:{line.strip()})4.4 读取指定字节数withopen(example.txt,r,encodingutf-8)asf:chunkf.read(100)# 读取前100个字符print(chunk)5. 写入文件内容5.1 写入字符串withopen(output.txt,w,encodingutf-8)asf:f.write(Hello, World!\n)# 写入一行注意手动添加换行符f.write(这是第二行。)5.2 写入多行列表lines_to_write[第一行\n,第二行\n,第三行\n]withopen(output.txt,w,encodingutf-8)asf:f.writelines(lines_to_write)# 将字符串列表写入文件6. 文件指针与定位文件对象内部有一个“指针”标识当前读写位置。withopen(example.txt,r,encodingutf-8)asf:# 获取当前指针位置字节数print(f.tell())# 读取前10个字符contentf.read(10)print(content)# 将指针移动到文件开头f.seek(0)# 在当前位置开头写入会覆盖原有内容f.write(覆盖开头)7. 使用 with 语句上下文管理器with open(...) as f:是 Python 中处理文件的最佳实践。它利用了 Python 的上下文管理器Context Manager协议确保文件在使用后会被正确关闭即使发生异常。7.1 基本语法与工作原理withopen(example.txt,r,encodingutf-8)asf:dataf.read()# 其他文件操作...# 离开 with 块后文件自动关闭执行流程open()函数返回一个文件对象该对象实现了上下文管理器协议即拥有__enter__和__exit__方法。进入with块时自动调用__enter__方法返回的文件对象被赋值给f。在with块内执行文件操作。离开with块时无论正常结束还是发生异常自动调用__exit__方法该方法会确保文件被关闭即调用f.close()。7.2 为什么推荐使用 with 语句自动资源管理无需手动调用close()避免因忘记关闭文件导致资源泄露如文件描述符耗尽。异常安全即使在with块内发生异常__exit__方法也会被执行文件依然会被正确关闭。代码简洁将文件打开、操作、关闭的逻辑封装在一个清晰的代码块中提高可读性。7.3 与手动 open/close 的对比# 推荐写法使用 withwithopen(example.txt,r)asf:dataf.read()# 文件已自动关闭# 不推荐写法手动管理fopen(example.txt,r)try:dataf.read()finally:f.close()# 必须确保关闭即使发生异常使用with语句相当于上面的try...finally模式但更加简洁、不易出错。7.4 同时打开多个文件with语句支持同时管理多个上下文管理器可以一行内打开多个文件withopen(source.txt,r)assrc,open(target.txt,w)astgt:contentsrc.read()tgt.write(content)这种方式同样确保了两个文件都会在离开with块后被正确关闭。7.5 注意事项with语句只负责自动关闭文件不处理文件不存在、权限错误等异常。这些仍需通过try...except捕获参见第9节。在with块外部访问文件对象如f.read()会引发ValueError: I/O operation on closed file.因为文件已关闭。with语句不仅用于文件操作也适用于其他需要资源管理如网络连接、数据库连接、锁的场景。总结在 Python 中处理文件时应始终优先使用with open(...) as f:模式。这是编写健壮、清晰代码的基本习惯。8. 处理大文件的技巧一次性读取大文件可能导致内存不足。应采用流式或分块读取。8.1 逐行处理文本文件withopen(large_log.txt,r,encodingutf-8)asf:forlineinf:# 一次只读一行到内存process_line(line)# 处理该行8.2 分块读取二进制或文本文件chunk_size1024*1024# 每次读取 1MBwithopen(large_file.bin,rb)asf:whileTrue:chunkf.read(chunk_size)ifnotchunk:# 读取到文件末尾breakprocess_chunk(chunk)9. 常见错误与异常处理文件操作中常见的异常需要妥善处理。try:withopen(non_existent.txt,r)asf:contentf.read()exceptFileNotFoundError:print(文件不存在请检查路径。)exceptPermissionError:print(没有文件读写权限。)exceptUnicodeDecodeError:print(文件编码错误请指定正确的 encoding 参数。)exceptIOErrorase:print(f发生I/O错误:{e})10. 综合示例复制文件结合读写操作实现一个简单的文件复制功能。defcopy_file(source_path,target_path):复制文本文件try:withopen(source_path,r,encodingutf-8)assrc:withopen(target_path,w,encodingutf-8)astgt:forlineinsrc:tgt.write(line)print(f文件复制成功{source_path}-{target_path})exceptExceptionase:print(f复制失败:{e})# 使用示例copy_file(source.txt,backup.txt)11. 总结核心函数使用open()打开文件用with语句管理上下文。模式选择根据需求选择正确的moder/w/a及其组合。读取方式小文件用read()大文件用迭代或read(size)分块。写入注意w模式会清空原文件a模式用于追加。编码问题处理中文务必指定encodingutf-8。异常处理使用try...except捕获FileNotFoundError,PermissionError等。掌握这些基础操作你就能应对绝大多数 Python 文件处理场景。接下来可以探索os和pathlib模块进行更复杂的文件和路径操作。
返回列表