You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过f1.py批量修改同目录下Python文件的print内容并运行所有文件

解决方案

我来给你一步步实现这个需求,直接上代码和解释,保证清晰易懂:

核心思路

要完成这个任务,我们需要分三步走:

  • 从f1.py自身提取print函数里的目标字符串(也就是"ABCD")
  • 替换f2.py、f3.py中print函数的输出内容
  • 执行目录下所有的Python文件

完整的f1.py代码

import re
import subprocess
import os

# 第一步:从f1.py自身提取print的字符串
def get_f1_print_str():
    # 读取当前文件(f1.py)的内容
    with open(__file__, 'r', encoding='utf-8') as f:
        content = f.read()
    # 用正则匹配print("xxx")格式的语句,提取引号内的内容
    match = re.search(r'print\("(.*?)"\)', content)
    if match:
        return match.group(1)
    else:
        raise ValueError("在f1.py中未找到符合格式的print语句")

# 第二步:替换目标文件中的print字符串
def replace_print_str(target_files, new_str):
    # 匹配print语句的正则,捕获引号前后的部分,方便替换
    pattern = re.compile(r'(print\(").*?("\))')
    for file in target_files:
        with open(file, 'r', encoding='utf-8') as f:
            content = f.read()
        # 替换print语句中的字符串
        new_content = pattern.sub(rf'\1{new_str}\2', content)
        # 写回文件
        with open(file, 'w', encoding='utf-8') as f:
            f.write(new_content)
        print(f"已更新文件: {file}")

# 第三步:运行目录下所有Python文件
def run_all_py_files():
    # 获取当前目录下所有.py文件
    py_files = [f for f in os.listdir('.') if f.endswith('.py')]
    for file in py_files:
        print(f"开始运行: {file}")
        # 用subprocess运行Python文件,输出结果
        result = subprocess.run(['python', file], capture_output=True, text=True)
        print(f"{file} 运行输出:\n{result.stdout}")
        if result.stderr:
            print(f"{file} 错误信息:\n{result.stderr}")

if __name__ == "__main__":
    try:
        # 获取f1的print字符串
        f1_print_str = get_f1_print_str()
        # 指定要修改的目标文件
        target_files = ['f2.py', 'f3.py']
        # 替换内容
        replace_print_str(target_files, f1_print_str)
        # 运行所有py文件
        run_all_py_files()
    except Exception as e:
        print(f"执行出错: {str(e)}")

关键细节说明

  • 正则匹配:用re.search和re.sub精准定位和替换print语句,确保只修改print("xxx")格式的内容,不会误改注释里的字符串
  • 文件读写:使用utf-8编码保证兼容性,建议先备份f2.py和f3.py再测试,避免意外覆盖内容
  • 运行文件:用subprocess.run执行每个Python文件,同时捕获标准输出和错误输出,方便查看运行结果

测试效果

运行f1.py后,f2.py和f3.py里的print("EFGH")会被替换成print("ABCD"),然后三个文件会依次运行,最终输出三次"ABCD"。

内容的提问来源于stack exchange,提问作者Cat Licker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:09:44