实用脚本能批量替换吗?

wen 实用脚本 10

本文目录导读:

实用脚本能批量替换吗?

  1. 场景一:批量替换多个文件中的文本内容(如:把代码里的旧API名换成新API名)
  2. 场景二:批量替换文件名中的部分字符串(如:把「2024年1月.png」改为「2024年2月.png」)
  3. 场景三:批量替换 Excel/CSV 文件中的数据(如:把某列的数据统一替换)
  4. 使用建议
  5. 安全提示(非常重要)

是的,实用脚本完全可以实现批量替换功能,批量替换是脚本最擅长解决的场景之一,可以极大提高效率。

具体如何实现,取决于你要在什么文件或内容上进行替换,下面我按不同的需求和场景,给出几种常用的脚本方案(主要用Python和Shell脚本,因为它们在批量处理上最通用)。

批量替换多个文件中的文本内容(如:把代码里的旧API名换成新API名)

这是最常见的需求,比如你想把项目里所有 .txt.py 文件中的 “old_version” 全部替换成 “0_version”。

Python 脚本示例:

import os
import re  # 如果需要正则表达式
def batch_replace_in_files(root_dir, old_text, new_text, file_extension=".txt", use_regex=False):
    """
    批量替换指定目录下所有特定扩展名文件中的文本
    :param root_dir: 根目录路径
    :param old_text: 要查找的旧文本
    :param new_text: 要替换的新文本
    :param file_extension: 文件扩展名,如 ".py", ".txt", ".md"
    :param use_regex: 是否使用正则表达式模式匹配
    """
    for foldername, subfolders, filenames in os.walk(root_dir):
        for filename in filenames:
            if filename.endswith(file_extension):
                filepath = os.path.join(foldername, filename)
                try:
                    with open(filepath, 'r', encoding='utf-8') as f:
                        content = f.read()
                    # 执行替换
                    if use_regex:
                        new_content = re.sub(old_text, new_text, content)
                    else:
                        new_content = content.replace(old_text, new_text)
                    # 如果内容有改动,才写回文件
                    if new_content != content:
                        with open(filepath, 'w', encoding='utf-8') as f:
                            f.write(new_content)
                        print(f"已替换: {filepath}")
                except Exception as e:
                    print(f"处理文件 {filepath} 时出错: {e}")
# 使用示例:将 ./my_project 目录下所有 .py 文件里 'Foo' 替换为 'Bar'
batch_replace_in_files("./my_project", "Foo", "Bar", file_extension=".py")

Shell 脚本(Linux/macOS 推荐,使用 sed):

#!/bin/bash
# 批量替换当前目录下所有 .txt 文件中的 old_text 为 new_text
# 注意:macOS 上 sed 需要加 '' 作为备份后缀,Linux 不需要
# 方法1: 使用 find + sed (最安全,支持递归目录)
find ./ -type f -name "*.txt" -exec sed -i 's/old_text/new_text/g' {} +
# 方法2: 直接在脚本中写
old="old_version"
new="new_version"
for file in *.txt; do
    if [ -f "$file" ]; then
        sed -i "s/$old/$new/g" "$file"
        echo "已替换: $file"
    fi
done

批量替换文件名中的部分字符串(如:把「2024年1月.png」改为「2024年2月.png」)

Python 脚本示例:

import os
def batch_rename_files(directory, old_section, new_section):
    """
    批量重命名文件,替换文件名中的特定字符串
    """
    for filename in os.listdir(directory):
        if old_section in filename:
            new_filename = filename.replace(old_section, new_section)
            old_path = os.path.join(directory, filename)
            new_path = os.path.join(directory, new_filename)
            os.rename(old_path, new_path)
            print(f"重命名: {filename} -> {new_filename}")
# 使用示例:将当前目录下所有文件名中的 "2024年1月" 改为 "2024年2月"
batch_rename_files("./", "2024年1月", "2024年2月")

Shell 脚本(Linux/macOS):

#!/bin/bash
# 批量重命名当前目录下所有 .jpg 文件,将 'photo_' 前缀改为 'image_'
for f in *photo_*.jpg; do
    mv "$f" "${f/photo_/image_}"
done

批量替换 Excel/CSV 文件中的数据(如:把某列的数据统一替换)

Python 脚本(使用 pandas):

import pandas as pd
import os
def batch_replace_in_csv(directory, old_value, new_value, column_name=None):
    """
    批量替换CSV文件中的单元格值
    :param column_name: 如果指定,只替换该列;否则替换所有单元格
    """
    for filename in os.listdir(directory):
        if filename.endswith(".csv"):
            filepath = os.path.join(directory, filename)
            df = pd.read_csv(filepath)
            if column_name:
                if column_name in df.columns:
                    df[column_name] = df[column_name].replace(old_value, new_value)
            else:
                df = df.replace(old_value, new_value)
            df.to_csv(filepath, index=False)
            print(f"已处理: {filename}")

使用建议

场景 推荐工具/脚本 理由
少量文件,一次性的文本替换 VS Code / Sublime 等编辑器的「在文件中查找替换」功能 可视化,安全
大量文件,需要复杂的正则 Python 脚本 (用 re 模块) 灵活,保证编码处理
Linux 服务器上快速处理 Shell + sed 无需安装环境,速度快
需要替换二进制文件中的字节 Python (以 rb/wb 模式读写) 二进制安全
替换特定格式文件 (Word, PDF, Excel) Python + python-docx / PyPDF2 / openpyxl 专业库解析格式

安全提示(非常重要)

  1. 先备份:在正式运行前,把要被替换的文件复制一份到备份文件夹。
  2. 先测试:用 dry_run=True 参数(自己实现),只打印结果,不实际修改。
  3. 确认编码:文件编码不统一时(如GBK和UTF-8混用),先用Python识别编码(可用chardet库)再操作。

是的,实用脚本可以批量替换,而且针对不同需求(文本替换、文件名替换、特定格式文件替换)有非常成熟的套路。 如果你能告诉我具体的替换场景(比如替换什么类型的文件、替换规则是什么),我可以给你一个更精准的脚本。

抱歉,评论功能暂时关闭!