曲靖市网站建设_网站建设公司_数据备份_seo优化
2025/12/31 11:27:12 网站建设 项目流程

想要用 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语句保证文件正确关闭。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询