求数组数值排序正则表达式,批量调整仿真输入参数文件内数组顺序
仿真输入文件参数数组批量排序脚本方案
针对超过100份、单文件200行以上的材料数据文件,可直接用以下脚本实现双元素参数数组的自动升序重排,同时保留原有文件的排版对齐格式。
Python 批量处理脚本
该脚本可批量遍历指定目录下的所有目标后缀材料文件,自动处理所有符合参数名 = [数值1 数值2],格式的行,处理前会自动生成.bak备份文件,避免数据丢失。
import os import re # 配置项:修改为你的材料文件存放目录、对应文件后缀 TARGET_DIR = "./material_files" FILE_SUFFIX = ".txt" BACKUP_ORIGIN = True # 匹配规则:匹配 任意参数名 = [数字1 任意空格 数字2] 格式的内容 PATTERN = re.compile(r'(\w+\s*=\s*\[)([\d.-]+)(\s+)([\d.-]+)(\],*)') def process_single_file(file_path): with open(file_path, 'r', encoding='utf-8') as f: lines = f.readlines() processed_lines = [] for line in lines: match = PATTERN.match(line) if not match: processed_lines.append(line) continue # 提取分组内容 prefix = match.group(1) num1 = float(match.group(2)) space = match.group(3) num2 = float(match.group(4)) suffix = match.group(5) # 排序两个数值 sorted_nums = sorted([num1, num2]) # 拼接回原格式,保留原有空格长度不破坏对齐 new_line = f"{prefix}{sorted_nums[0]}{space}{sorted_nums[1]}{suffix}\n" processed_lines.append(new_line) # 备份原文件 if BACKUP_ORIGIN: os.rename(file_path, f"{file_path}.bak") # 写入处理后的文件 with open(file_path, 'w', encoding='utf-8') as f: f.writelines(processed_lines) if __name__ == "__main__": for root, _, files in os.walk(TARGET_DIR): for file in files: if file.endswith(FILE_SUFFIX) and not file.endswith(".bak"): full_path = os.path.join(root, file) process_single_file(full_path) print("所有文件处理完成")
快速单行处理(Linux/macOS 环境适用)
如果仅需要临时处理少量文件,可直接用awk单行命令完成单文件转换:
awk '/\[.* .*\]/{split(substr($0,index($0,"[")+1,index($0,"]")-index($0,"[")-1),a," "); n1=a[1]+0; n2=a[length(a)]+0; if(n1>n2) {sub(/\[.*\]/,"["n2" "n1"]",$0)} }1' 输入文件.txt > 输出文件.txt
注意事项
- 若你的参数数组包含超过2个元素,可修改Python脚本的正则匹配逻辑,提取所有数组元素后统一排序再拼接即可
- 若仅需要处理指定名称的参数(如仅处理mobility、eps0两个参数),可在正则规则前加参数名过滤逻辑
内容的提问来源于stack exchange,提问作者JunsungPark
相关产品推荐
相关产品推荐

