记录 || Python | 提取xml/tmx文件中的文本内容

# -*- coding:utf-8 -*-
import codecs
import xml.etree.ElementTree as ET
import sys


defaultencoding = 'utf-8'
if sys.getdefaultencoding() != defaultencoding:
    reload(sys)
    sys.setdefaultencoding(defaultencoding)
# 默认情况下,Python采用的是ascii编码方式,将Python的默认编码方式修改为utf-8

tree = ET.parse('test.tmx')
root = tree.getroot()
body = root[1]
txtfile = codecs.open('target.txt', 'w', 'utf-8')
for item in body:
    try:
        bs = item[0][0].text
        zh = item[1][0].text
        bs = bs.decode('utf-8')
        zh = zh.decode('utf-8')
        txtfile.write(bs + "\t" + zh + "\n")
    except Exception as ex:
        print ex.message
        continue

txtfile.close()


 

以上方法能够很快遍历小型的xml和tmx,对于大型文件,直接读入建文档树,内存可能会爆炸,查了一些资料,像是分块处理之类的能够解决,小白没看懂,直接用最简单粗暴的方法,当作普通文件一行一行读入之后正则匹配提取内容

xmlfile = codecs.open("test.xml", 'r', 'utf-8')
txtfile = codecs.open("target.txt", 'w', 'utf-8')
line = xmlfile.readline()
while line:
    result = re.search('<tuv xml:lang="bs">', line)
    if result is not None:
        bs = re.sub('<.*?>', "", line)
        bs = bs.strip()
        bs = bs.decode('utf-8')
        txtfile.write(bs+"\t")
    else:
        result = re.search('<tuv xml:lang="zh">', line)
        if result is not None:
            zh = re.sub('<.*?>', "", line)
            zh = zh.strip()
            zh = zh.decode('utf-8')
            txtfile.write(zh+"\n")
    line = xmlfile.readline()

xmlfile.close()
txtfile.close()

以上方法太过粗暴,会受很多因素影响,比较合理的办法是先识别tuv标签头作为一对语句的开始,匹配到tuv关闭标签代表这对语句的结束

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bekote

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值