如何使用Python拆分DSX文件,为每个作业生成独立文件?
Python 拆分 DSX 文件中的作业块
下面是实现需求的具体代码和思路:
实现思路
- 读取
Project.dsx的全部内容,直接跳过BEGIN HEADER到END HEADER的部分 - 用正则匹配所有
BEGIN DSJOB到END DSJOB的完整块 - 从每个块中提取作业名称(Identifier后的字符串),作为输出文件名
- 将每个作业块单独写入对应名称的
.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
相关产品推荐
相关产品推荐

