基于TSS序列号用Python批量移动测试结果文件至对应文件夹
解决按TSS序列号分类移动文件的问题
你的代码核心问题是提取序列号的逻辑错误:file.split("TSS")[0]取的是文件名中TSS之前的部分,这和你需要的TSS-XXXX-XXXX序列号完全相反。要正确实现需求,我们可以用正则表达式精准匹配固定格式的序列号。
修正后的代码
import os import shutil import re # 源文件夹和目标文件夹(这里设为同一目录,即原地创建子文件夹分类) src_dir = r"C:\XYZ L48" dest_base_dir = r"C:\XYZ L48" # 定义匹配TSS序列号的正则模式:TSS-四位数字-四位数字 serial_pattern = re.compile(r'TSS-\d{4}-\d{4}') # 遍历源文件夹下的所有文件(包括子文件夹,若不需要子文件夹可去掉os.walk) for dirpath, _, files in os.walk(src_dir): for filename in files: # 跳过临时文件(比如文件名以.结尾的) if filename.endswith('.'): continue # 搜索文件名中的序列号 match = serial_pattern.search(filename) if match: serial_number = match.group() # 拼接目标文件夹路径 dest_dir = os.path.join(dest_base_dir, serial_number) # 创建文件夹(如果已存在则不报错) os.makedirs(dest_dir, exist_ok=True) # 拼接源文件路径和目标文件路径 src_file = os.path.join(dirpath, filename) dest_file = os.path.join(dest_dir, filename) # 移动文件 shutil.move(src_file, dest_file) print(f"已移动文件: {filename} -> {dest_dir}") else: print(f"未找到序列号,跳过文件: {filename}")
代码说明
- 正则匹配:
re.compile(r'TSS-\d{4}-\d{4}')专门匹配TSS-XXXX-XXXX格式的序列号,\d{4}表示四位数字,确保精准识别。 - 安全创建文件夹:
os.makedirs(..., exist_ok=True)避免重复创建文件夹时抛出错误,比os.mkdir更健壮。 - 跳过无效文件:过滤掉文件名以
.结尾的临时文件,同时对未匹配到序列号的文件给出提示,避免误操作。 - 路径处理:全程用
os.path.join拼接路径,适配Windows系统的路径格式,避免手动拼接路径出错。
可选调整
如果不需要遍历子文件夹,可替换os.walk为os.listdir,仅处理当前目录下的文件:
for filename in os.listdir(src_dir): src_file = os.path.join(src_dir, filename) if not os.path.isfile(src_file): continue # 后续匹配逻辑同上
内容的提问来源于stack exchange,提问作者Gromr123
相关产品推荐
相关产品推荐

