news 2026/4/18 2:00:52

python 读取文件,查找文件内容,替换文件内容。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python 读取文件,查找文件内容,替换文件内容。

想要用 Python 实现读取文件内容查找指定文本内容以及替换文件中特定内容的功能,这是文件处理中最基础也最常用的操作。我会分「小文件(一次性处理)」和「大文件(逐行处理)」两种场景给你提供实用的代码示例,兼顾易用性和性能。

一、小文件处理(一次性读取 / 替换)

如果你的文件体积较小(几 MB 以内),可以一次性将文件内容读取到内存中,完成查找和替换后再写回文件,操作最简单。

完整代码示例

python

def replace_file_content(file_path, old_str, new_str, encoding="utf-8"): """ 读取文件并替换指定内容(小文件适用) :param file_path: 文件路径(绝对/相对路径) :param old_str: 要查找并替换的旧字符串 :param new_str: 替换后的新字符串 :param encoding: 文件编码,默认utf-8 :return: 替换是否成功(布尔值) """ try: # 1. 读取文件全部内容 with open(file_path, "r", encoding=encoding) as f: content = f.read() # 一次性读取所有内容到内存 # 2. 查找并替换内容(统计替换次数) replace_count = content.count(old_str) # 先统计旧字符串出现次数(查找功能) if replace_count == 0: print(f"未找到需要替换的内容:{old_str}") return False new_content = content.replace(old_str, new_str) # 替换内容 # 3. 将替换后的内容写回文件(覆盖原文件) with open(file_path, "w", encoding=encoding) as f: f.write(new_content) print(f"替换完成!共替换 {replace_count} 处内容") return True except FileNotFoundError: print(f"错误:文件 {file_path} 不存在") return False except Exception as e: print(f"替换失败:{str(e)}") return False # ------------------- 调用示例 ------------------- if __name__ == "__main__": # 替换test.txt中的"旧内容"为"新内容" replace_file_content( file_path="test.txt", old_str="旧内容", new_str="新内容" )

代码关键说明

  1. 文件读取 / 写入:使用with open(...)语句(上下文管理器),会自动关闭文件,避免资源泄漏;
  2. 查找功能:通过content.count(old_str)统计旧字符串出现次数,实现「查找内容是否存在 + 出现次数」;
  3. 替换功能:通过content.replace(old_str, new_str)替换所有匹配的内容,若只想替换第 N 处,可结合切片实现;
  4. 编码处理:指定encoding="utf-8"避免中文乱码(若文件是 gbk 编码,需改为encoding="gbk")。

二、大文件处理(逐行读取 / 替换)

如果文件体积很大(几十 MB/GB 级),一次性读取会占用大量内存,此时需要逐行读取、逐行替换、写入临时文件,最后替换原文件。

完整代码示例

python

import os import tempfile def replace_large_file_content(file_path, old_str, new_str, encoding="utf-8"): """ 逐行处理大文件,替换指定内容(避免内存溢出) :param file_path: 原文件路径 :param old_str: 要替换的旧字符串 :param new_str: 新字符串 :param encoding: 文件编码 :return: 替换是否成功 """ replace_count = 0 # 创建临时文件(避免替换过程中原文件损坏) temp_fd, temp_path = tempfile.mkstemp() try: # 1. 逐行读取原文件,替换后写入临时文件 with open(file_path, "r", encoding=encoding) as f_src, \ open(temp_path, "w", encoding=encoding) as f_temp: for line_num, line in enumerate(f_src, 1): # 查找并替换当前行的内容 line_count = line.count(old_str) if line_count > 0: replace_count += line_count line = line.replace(old_str, new_str) f_temp.write(line) # 2. 替换完成后,用临时文件覆盖原文件 os.remove(file_path) # 删除原文件 os.rename(temp_path, file_path) # 临时文件重命名为原文件 if replace_count == 0: print(f"未找到需要替换的内容:{old_str}") return False print(f"替换完成!共替换 {replace_count} 处内容") return True except FileNotFoundError: print(f"错误:文件 {file_path} 不存在") return False except Exception as e: print(f"替换失败:{str(e)}") # 清理临时文件 os.close(temp_fd) os.remove(temp_path) return False # ------------------- 调用示例 ------------------- if __name__ == "__main__": replace_large_file_content( file_path="large_file.txt", old_str="旧内容", new_str="新内容" )

代码关键说明

  1. 临时文件:使用tempfile.mkstemp()创建临时文件,避免替换过程中程序崩溃导致原文件损坏;
  2. 逐行处理for line in f_src逐行读取,每行处理后立即写入临时文件,内存占用极低;
  3. 文件替换:先删除原文件,再将临时文件重命名为原文件,保证原子性;
  4. 异常清理:捕获异常后清理临时文件,避免残留垃圾文件。

三、扩展:模糊查找 / 正则替换

如果需要模糊匹配(如匹配带通配符、正则表达式的内容),可以使用 Python 的re库:

python

import re def regex_replace_file(file_path, pattern, new_str, encoding="utf-8"): """ 正则表达式替换文件内容 :param pattern: 正则表达式匹配模式 :param new_str: 替换后的内容(支持正则分组引用) """ try: with open(file_path, "r", encoding=encoding) as f: content = f.read() # 正则替换(subn返回替换后的内容+替换次数) new_content, replace_count = re.subn(pattern, new_str, content) with open(file_path, "w", encoding=encoding) as f: f.write(new_content) print(f"正则替换完成!共替换 {replace_count} 处内容") return True except Exception as e: print(f"正则替换失败:{str(e)}") return False # 调用示例:替换所有以"数字+"开头的内容为"数量:数字" # regex_replace_file("test.txt", r"(\d+)\+", r"数量:\1", encoding="utf-8")

总结

  1. 小文件:优先使用「一次性读取→替换→写入」的方式,代码简洁,效率高;
  2. 大文件:必须用「逐行读取 + 临时文件」的方式,避免内存溢出,同时做好异常清理;
  3. 模糊匹配:使用re库实现正则替换,支持更灵活的查找替换需求;
  4. 核心注意点:处理文件时指定正确的编码(utf-8/gbk),避免中文乱码;使用with语句保证文件正确关闭。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/6 16:53:51

NewsNow信息聚合工具终极指南:高效获取实时热点的完整方法

NewsNow信息聚合工具终极指南:高效获取实时热点的完整方法 【免费下载链接】newsnow Elegant reading of real-time and hottest news 项目地址: https://gitcode.com/GitHub_Trending/ne/newsnow 在信息过载的时代,我们每天面对海量新闻资讯却难…

作者头像 李华
网站建设 2026/4/15 15:02:56

EFQRCode技术架构深度解析:从基础编码到跨平台图形渲染的突破

EFQRCode技术架构深度解析:从基础编码到跨平台图形渲染的突破 【免费下载链接】EFQRCode A better way to operate QR Code in Swift, support iOS, macOS, watchOS and tvOS. 项目地址: https://gitcode.com/gh_mirrors/ef/EFQRCode 为什么EFQRCode能在众多…

作者头像 李华
网站建设 2026/4/12 18:12:49

计算机毕业设计springboot基于Java的美食网站系统 基于SpringBoot的Java美食分享与订餐一体化平台 融合在线商城的Java美食社区系统设计与实现

计算机毕业设计springboot基于Java的美食网站系统gv618t67 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。“吃”是互联网永不过时的流量入口。当短视频把“看吃”推向高潮&…

作者头像 李华
网站建设 2026/4/15 22:03:37

DiffusionToolkit 终极指南:快速掌握AI图像元数据管理与智能检索

DiffusionToolkit 是一款专为AI生成图像设计的元数据索引器和可视化工具,能够帮助用户高效管理、检索和分析海量AI图像资源。无论你是AI艺术创作者、研究者还是数字内容资产管理师,这个开源工具都能显著提升你的工作效率。 【免费下载链接】DiffusionToo…

作者头像 李华
网站建设 2026/4/2 1:18:26

Luma3DS虚拟系统高阶配置指南:从原理到实战的深度优化

掌握Luma3DS虚拟系统(EmuNAND)的深度配置技巧,是每个3DS自制系统玩家进阶的必经之路。通过理解底层实现原理和掌握关键配置参数,你不仅能充分发挥虚拟系统的隔离保护优势,还能解锁更多高级功能。 【免费下载链接】Luma3DS Noob-proof (N)3DS …

作者头像 李华