news 2026/7/1 22:53:42

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/7/1 17:55:00

GLPI:终极IT资产管理解决方案的完整指南

GLPI:终极IT资产管理解决方案的完整指南 【免费下载链接】glpi glpi-project/glpi: 是一个用于管理 IT 资产和服务的 PHP 应用程序。适合用于 IT 资产管理和服务管理。特点是提供了简单的 API,支持多种 IT 资产和服务管理功能,并且可以自定义…

作者头像 李华
网站建设 2026/6/30 8:31:35

ComfyUI-Diffusers 完整使用指南

ComfyUI-Diffusers 完整使用指南 【免费下载链接】ComfyUI-Diffusers This repository is a custom node in ComfyUI. This is a program that allows you to use Huggingface Diffusers module with ComfyUI. Additionally, Stream Diffusion is also available. 项目地址: …

作者头像 李华
网站建设 2026/6/30 12:50:54

好写作AI:伦理指南——负责任地使用AI写作工具,避免学术不端

随着以 好写作AI 为代表的智能写作工具迅速普及,学术界迎来了一场深刻的效率革命。然而,技术应用始终伴随着伦理边界。我们坚信,界定并倡导 “负责任的使用” ,不仅是维护学术尊严的基石,更是让每一位用户能长久、安心…

作者头像 李华
网站建设 2026/6/15 13:38:27

Jupyter自动保存间隔设置防止TensorFlow工作丢失

Jupyter自动保存间隔设置防止TensorFlow工作丢失 在深度学习开发中,最令人沮丧的场景之一莫过于:你花了几小时调试一个复杂的 TensorFlow 模型,调整了数据预处理流程、修改了网络结构、跑通了前几轮训练——结果因为一次意外断网或内核崩溃&a…

作者头像 李华
网站建设 2026/6/23 14:23:33

P2P直连工具终极指南:零基础实现远程主机直连

P2P直连工具终极指南:零基础实现远程主机直连 【免费下载链接】goodlink 全网最简单、零成本,一条命令将互联网任意两台主机直连!无中转、无安装、无注册。新增TUN模式,IP直连,不限端口 项目地址: https://gitcode.c…

作者头像 李华
网站建设 2026/6/30 5:38:42

终极指南:如何使用Martini框架快速构建Go Web应用

终极指南:如何使用Martini框架快速构建Go Web应用 【免费下载链接】martini Classy web framework for Go 项目地址: https://gitcode.com/gh_mirrors/ma/martini Martini是一款专为Go语言设计的优雅Web框架,以其简洁的语法和强大的功能而闻名。作…

作者头像 李华