首页 > 解决方案 > 在标签之间搜索和替换字符串

问题描述

我有以下 100,000 行的文档。在本文档中,我有一些不同语言的翻译,我的问题是我需要让“en_US”和“en”完全相同(标签之间的文本)。我尝试使用 SED、AWK、TR,但我无法实现我的目标并且不会影响其他语言。有任何想法吗?

  <prop type="context"></prop>
<tuv xml:lang="en_US">
    <seg>Enter and manage product details.</seg>
</tuv>
<tuv xml:lang="de">
    <seg>Geben Sie die Produkt-Details ein und verwalten Sie diese.</seg>
</tuv>
<tuv xml:lang="en">
    <seg>Enter and manage customer product details.</seg>
</tuv>
<tuv xml:lang="es">
    <seg>Introduzca y gestione los detalles del producto.</seg>
</tuv>
<tuv xml:lang="fr_FR">
    <seg>Entrez et gérez les détails sur le produit.</seg>
</tuv>
<tuv xml:lang="ja">
    <seg>商品の詳細を入力、管理します。&lt;/seg>
</tuv>
<tuv xml:lang="zh_CN">
    <seg>输入并管理产品详细信息。&lt;/seg>
</tuv>

期望的输出:

      <prop type="context"></prop>
<tuv xml:lang="en_US">
    <seg>Enter and manage product details.</seg>
</tuv>
<tuv xml:lang="de">
    <seg>Geben Sie die Produkt-Details ein und verwalten Sie diese.</seg>
</tuv>
<tuv xml:lang="en">
    <seg>Enter and manage product details.</seg>
</tuv>
<tuv xml:lang="es">
    <seg>Introduzca y gestione los detalles del producto.</seg>
</tuv>
<tuv xml:lang="fr_FR">
    <seg>Entrez et gérez les détails sur le produit.</seg>
</tuv>
<tuv xml:lang="ja">
    <seg>商品の詳細を入力、管理します。&lt;/seg>
</tuv>
<tuv xml:lang="zh_CN">
    <seg>输入并管理产品详细信息。&lt;/seg>
</tuv>

谢谢!

标签: pythonawksedtr

解决方案


en_US 总是排在第一位吗?

import sys
state = 'bypass'
for line in open(sys.argv[1]):
    line = line.rstrip()
    if line.find("<tuv") >= 0 and line.find("en-US") >= 0:
        state = 'grab'
    elif line.find("<tuv") >= 0 and line.find("en") >= 0:
        state = 'replace'
    elif state == 'grab':
        grab = line
        state = 'bypass'
    elif state == 'replace':
        print(grab)
        state = 'bypass'
        continue
    print(line)

如果这不仅仅是一次性的事情,我可能会考虑使用 XML 包来读取数据、转换数据并将其写回,但这对于一次性的情况来说很好。


推荐阅读