news 2026/5/1 15:32:22

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/28 14:41:14

电商平台高并发支付安全测试:构建可靠防线的技术实践‌

在数字经济时代,电商平台的高并发支付场景(如双11大促或节日活动)已成为常态,但这也引入了支付安全风险——包括数据泄露、交易欺诈和系统崩溃等。对于软件测试从业者而言,确保支付系统在高流量下安全可靠,…

作者头像 李华
网站建设 2026/4/30 14:24:48

基于Proteus的双踪示波器仿真操作完整示例

手把手教你用Proteus玩转双踪示波器仿真:从RC电路看透信号测量本质你有没有过这样的经历?想观察一个电容充电的全过程,却因为手头没有示波器而只能靠计算“脑补”波形;或者在讲授《模拟电子技术》时,学生一脸茫然地问&…

作者头像 李华
网站建设 2026/5/1 8:02:29

GLPI终极指南:从零开始掌握开源IT资产管理神器

GLPI终极指南:从零开始掌握开源IT资产管理神器 【免费下载链接】glpi glpi-project/glpi: 是一个用于管理 IT 资产和服务的 PHP 应用程序。适合用于 IT 资产管理和服务管理。特点是提供了简单的 API,支持多种 IT 资产和服务管理功能,并且可以…

作者头像 李华
网站建设 2026/5/1 6:47:21

5种实用方案:用DPlayer为视频内容构建版权保护体系

您的原创视频是否曾遭遇"幽灵盗版"却无从追溯?作为内容创作者,最令人痛心的是精心制作的作品被随意搬运却无法有效维护权益。今天我们将通过DPlayer这款优秀的HTML5弹幕视频播放器,为您系统性地构建多层级版权保护方案。阅读本文后…

作者头像 李华
网站建设 2026/4/30 6:07:52

高效串口通信:hal_uartex_receivetoidle_dma优化策略

高效串行通信的现代解法:用DMA空闲中断实现零拷贝、低负载的UART接收你有没有遇到过这样的场景?一个STM32项目里,串口波特率跑到了115200甚至921600,外设设备像机关枪一样往外发数据。结果主线程卡顿、任务调度失常,调…

作者头像 李华
网站建设 2026/4/28 3:19:31

好写作AI:导师视角|为何越来越多导师认可学生使用AI辅助工具

“我的态度经历了从警惕到鼓励的转变。” —— 一位985高校硕士生导师的真实心声作为长期指导本科、研究生论文的高校教师,我们观察到近年来学术辅助工具的快速发展。最初,许多导师对 好写作AI 这类工具持审慎甚至怀疑态度。然而,随着教学实践…

作者头像 李华