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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:20:25