如何用Unix命令统计.tmx文件的行数、词数并提取文件结构
TMX文件处理及Unix命令调用问题解决方案
问题根因
- 核心误区:
os.system()的返回值是Unix命令的退出状态码,而非命令的标准输出内容。命令执行成功时退出状态码为0,你之前拿到的0是命令运行成功的标识,并非wc的统计结果。 - 命令语法错误:
grep file.tmx缺少必填的匹配模式参数,grep会将file.tmx识别为待匹配的模式,等待从标准输入读取内容,最终因参数错误返回状态码2,对应os.system返回值为2*256=256grep "\n" file.tmx逻辑错误,grep默认按行读取内容,不会匹配行尾的换行符,同样触发错误返回状态码2,对应os.system返回值2*256=512
解决方案
TMX文件基础说明
TMX(Translation Memory eXchange)是标准XML格式的翻译记忆文件,本质为结构化文本,无需专用工具即可用常规Unix命令做行数、词数统计。
1. 独立Unix命令正确写法
- 统计行数:
wc -l file.tmx - 统计词数:
wc -w file.tmx - 同时统计行数、词数、字符数:
wc file.tmx
2. Python中获取命令统计结果的正确写法
不要使用os.system,改用subprocess模块捕获命令的标准输出:
import subprocess # 统计行数 line_count = int(subprocess.check_output(['wc', '-l', 'file.tmx']).split()[0]) # 统计词数 word_count = int(subprocess.check_output(['wc', '-w', 'file.tmx']).split()[0]) print(f"行数:{line_count},词数:{word_count}")
3. TMX结构化内容提取
如果需要解析翻译单元等结构化数据,可以直接用Python XML解析库处理:
import xml.etree.ElementTree as ET tree = ET.parse('file.tmx') root = tree.getroot() # 遍历所有翻译单元 for tu in root.iter('tu'): # 此处可自定义处理每个翻译单元的内容 seg_content = tu.find('tuv/seg').text print(seg_content)
内容的提问来源于stack exchange,提问作者abdullatif alnajim
相关产品推荐
相关产品推荐

