☰
Autosar arxml异常字符串处理
2026/10/14 19:34:29 网站建设 项目流程

使用vscode的时候发现查看arxml的时候,有的节点无法折叠,当遇到大段节点数据的时候,查看就显得非常麻烦,这时候可以将文件中不合法数据处理掉,方便查阅文件。

1、clean_arxml_desc.py脚本处理

#!/usr/bin/env python # -*- coding: utf-8 -*- """ Clean garbled characters and newlines from <DESC>...</DESC> elements in ARXML files. Usage: python clean_arxml_desc.py <file1> [file2 ...] python clean_arxml_desc.py *.arxml What it does: - Removes non-ASCII (garbled) characters inside <DESC> elements - Removes newline characters (\n, \r) inside <DESC> elements - Creates a .bak backup before modifying """ import os import re import sys def clean_desc_content(match): """Remove non-ASCII chars and newlines from a matched DESC element.""" desc = match.group(0) # Step 1: Remove non-ASCII characters (ord >= 128) cleaned = ''.join(ch for ch in desc if ord(ch) < 128) # Step 2: Remove newline characters cleaned = cleaned.replace('\n', '').replace('\r', '') return cleaned def clean_arxml_file(filepath): """Clean all <DESC> elements in a single ARXML file.""" # Read file with open(filepath, 'r') as f: content = f.read() # Match <DESC>...</DESC> across lines desc_pattern = re.compile(r'<DESC>.*?</DESC>', re.DOTALL) old_matches = desc_pattern.findall(content) # Count issues before cleaning garbled_count = sum( 1 for m in old_matches if any(ord(c) >= 128 for c in m) ) multiline_count = sum(1 for m in old_matches if '\n' in m) # Perform cleaning new_content = desc_pattern.sub(clean_desc_content, content) # Verify new_matches = desc_pattern.findall(new_content) changed = sum(1 for o, n in zip(old_matches, new_matches) if o != n) remaining_garbled = sum( 1 for m in new_matches if any(ord(c) >= 128 for c in m) ) remaining_multiline = sum(1 for m in new_matches if '\n' in m) # Create backup bak_path = filepath + '.bak' with open(bak_path, 'w') as f: f.write(content) # Write cleaned content with open(filepath, 'w') as f: f.write(new_content) # Report filename = os.path.basename(filepath) print('=' * 60) print('File: {}'.format(filename)) print(' Total <DESC> elements: {}'.format(len(old_matches))) print(' With garbled chars: {}'.format(garbled_count)) print(' With newlines: {}'.format(multiline_count)) print(' Elements cleaned: {}'.format(changed)) print(' Remaining garbled: {}'.format(remaining_garbled)) print(' Remaining newlines: {}'.format(remaining_multiline)) print(' Backup saved to: {}'.format(bak_path)) def main(): if len(sys.argv) < 2: print(__doc__) print('Error: Please provide at least one ARXML file path.') sys.exit(1) for filepath in sys.argv[1:]: if not os.path.isfile(filepath): print('Warning: File not found, skipping: {}'.format(filepath)) continue clean_arxml_file(filepath) print('=' * 60) print('Done. Processed {} file(s).'.format(len(sys.argv) - 1)) if __name__ == '__main__': main()

用法:

# 处理单个文件
python clean_arxml_desc.py xxx.arxml

# 批量处理
python clean_arxml_desc.py *.arxml

功能:

  • 删除<DESC>...</DESC>内的非 ASCII 乱码字符(ord >= 128)
  • 删除<DESC>...</DESC>内的换行符(\n、\r)
  • 修改前自动生成.bak备份文件
  • 输出清理统计报告

处理后效果图:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询