import os
import shutil
import subprocess
from pathlib import Path
def process_directory(directory, target_base):
"""处理单个目录"""
print(f"\n处理目录: {directory}")
# 获取目录下所有文件
files = []
for f in Path(directory).iterdir():
if f.is_file():
# 排除 modeling_tf_ 前缀的文件
if not f.name.startswith("modeling_tf_"):
files.append(f)
if not files:
print(f"目录 {directory} 中没有符合条件的文件,跳过")
return
# 按文件大小排序(从大到小)
files.sort(key=lambda f: f.stat().st_size, reverse=True)
# 取最大的两个文件
top_files = files[:2]
print(f"找到最大文件: {[f.name for f in top_files]}")
# 处理每个文件
for file in top_files:
# 提取 AAA 部分
if file.name.startswith("modeling_") and file.name.endswith(".py"):
aaa = file.name[9:-3] # 去掉 "modeling_" 和 ".py"
else:
print(f"跳过非标准文件名: {file.name}")
continue
print(f"\n处理文件: {file.name} (AAA = {aaa})")
# 创建 AAA_clx 目录
aaa_clx = Path(f"{aaa}_clx")
if not aaa_clx.exists():
aaa_clx.mkdir()
print(f"创建目录: {aaa_clx}")
# 复制文件到 AAA_clx
dest_file = aaa_clx / file.name
shutil.copy(file, dest_file)
print(f"复制文件到: {dest_file}")
# 进入目录并运行脚本
os.chdir(aaa_clx)
print(f"当前工作目录: {os.getcwd()}")
# 运行 splitPy3.py 脚本
try:
result = subprocess.run(
["python311", "/tmp/splitPy3.py", file.name],
check=True,
capture_output=True,
text=True
)
print(f"脚本输出:\n{result.stdout}")
if result.stderr:
print(f"脚本错误:\n{result.stderr}")
except subprocess.CalledProcessError as e:
print(f"运行脚本失败: {e}")
print(f"错误输出:\n{e.stderr}")
# 返回上级目录
os.chdir("..")
print(f"返回目录: {os.getcwd()}")
# 复制整个目录到目标位置
target_dir = Path(target_base) / "modelToclx" / aaa_clx
if not target_dir.parent.exists():
target_dir.parent.mkdir(parents=True, exist_ok=True)
if target_dir.exists():
print(f"目标目录已存在,覆盖: {target_dir}")
shutil.rmtree(target_dir)
shutil.copytree(aaa_clx, target_dir)
print(f"复制到目标位置: {target_dir}")
def main():
# 目标目录
target_base = "/Users/sujingqiao/Documents/homepage/ENV/myenv/source/transformers/src/transformers/models"
# 获取当前目录下所有子目录
directories = [d for d in Path.cwd().iterdir() if d.is_dir()]
if not directories:
print("当前目录下没有子目录")
return
print(f"找到 {len(directories)} 个子目录")
# 处理每个目录
for directory in directories:
process_directory(directory, target_base)
print("\n所有处理完成!")
if __name__ == "__main__":
main()
需求:
mkdir AAA_clx cp modeling_AAA.py AAA_clx cd AAA_clx python311 /tmp/splitPy3.py modeling_AAA.py cd .. cp -rf AAA_clx /Users/sujingqiao/Documents/homepage/ENV/myenv/source/transformers/src/transformers/models/modelToclx 写一个python脚本,批量化操作 上面这些命令, 其中 AAA 是遍历当前目录下各个文件夹,找到 按大小排序最大两个,且除掉modeling_tf_为前缀那个文件