如何为复制的文件添加来源子目录名称作为前缀?
实现复制文件时添加来源子目录前缀的技巧
核心思路是从文件的完整路径中提取目标子目录名称,拼接为前缀后生成新文件名,再执行复制操作。以下是修改后的代码及关键说明:
修改后的代码
import os import glob import shutil # 定义基础路径与目标目录 base_dir = '/opt/data/input/IP10' target_dir = '/opt/data/input/IP10_for_decoder/copy/' # 确保目标目录存在,不存在则自动创建 os.makedirs(target_dir, exist_ok=True) # 递归遍历基础路径下的所有文件 for file_path in glob.glob(os.path.join(base_dir, '**', '*.*'), recursive=True): # 标准化路径并拆分为目录/文件部分 path_parts = os.path.normpath(file_path).split(os.sep) # 定位基准目录"IP10"的位置 try: ip10_index = path_parts.index('IP10') except ValueError: continue # 跳过路径不符合预期的文件 # 提取IP10后的两级子目录作为前缀(需确保路径层级足够) if len(path_parts) >= ip10_index + 3: subdir1 = path_parts[ip10_index + 1] subdir2 = path_parts[ip10_index + 2] prefix = f"{subdir1}_{subdir2}" # 生成带前缀的新文件名 original_name = os.path.basename(file_path) new_file_name = f"{prefix}_{original_name}" # 构建目标文件路径并执行复制 target_file = os.path.join(target_dir, new_file_name) shutil.copy(file_path, target_file)
关键细节说明
- 路径处理:用
os.path.normpath统一路径格式,避免因系统差异导致的拆分错误;通过split(os.sep)将路径拆分为独立的目录/文件节点。 - 前缀提取:通过
index('IP10')定位基准目录,提取其后两级子目录名称并拼接为前缀,匹配你需要的STAT-IP_202211151610_7428_some_files格式。 - 容错处理:添加
try-except和长度判断,避免因路径层级不足或格式异常导致程序崩溃。 - 目录预创建:
os.makedirs(..., exist_ok=True)确保目标目录存在,无需手动提前创建。
内容的提问来源于stack exchange,提问作者stanny
相关产品推荐
相关产品推荐

