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

如何使用Python拆分DSX文件,为每个作业生成独立文件?

Python 拆分 DSX 文件中的作业块

下面是实现需求的具体代码和思路:

实现思路

  1. 读取Project.dsx的全部内容,直接跳过BEGIN HEADER到END HEADER的部分
  2. 用正则匹配所有BEGIN DSJOB到END DSJOB的完整块
  3. 从每个块中提取作业名称(Identifier后的字符串),作为输出文件名
  4. 将每个作业块单独写入对应名称的.dsx文件

代码实现

import re

# 读取源文件内容
with open('Project.dsx', 'r') as f:
    content = f.read()

# 跳过HEADER部分,取HEADER之后的内容
header_end = content.find('END HEADER')
if header_end != -1:
    content_after_header = content[header_end + len('END HEADER'):]
else:
    content_after_header = content  # 兼容没有HEADER的情况

# 匹配所有DSJOB块,正则确保捕获跨多行的完整块
dsjob_pattern = re.compile(r'BEGIN DSJOB.*?END DSJOB', re.DOTALL)
dsjob_blocks = dsjob_pattern.findall(content_after_header)

# 遍历每个块,提取作业名并写入文件
for block in dsjob_blocks:
    # 提取Identifier引号内的作业名
    job_name_match = re.search(r'Identifier "([^"]+)"', block)
    if job_name_match:
        job_name = job_name_match.group(1).lower()  # 转小写匹配示例文件名格式
        output_filename = f'{job_name}.dsx'
        # 写入文件并保留原始格式
        with open(output_filename, 'w') as out_f:
            out_f.write(block.strip() + '\n')
        print(f'已生成文件: {output_filename}')
    else:
        print('未找到作业ID,跳过该块')

代码说明

  • 跳过HEADER:通过字符串定位END HEADER的位置,直接截取后续内容,简单高效
  • 匹配DSJOB块:使用re.DOTALL让正则表达式的.匹配换行符,确保能捕获多行结构的完整作业块
  • 提取作业名:精准匹配Identifier "xxx"格式的字符串,提取引号内的作业名称并转小写
  • 写入文件:每个作业块单独写入对应文件,保留原始内容的格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 22:42:43