python - 在标签之间搜索和替换字符串
问题描述
我有以下 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>商品の詳細を入力、管理します。</seg>
</tuv>
<tuv xml:lang="zh_CN">
<seg>输入并管理产品详细信息。</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>商品の詳細を入力、管理します。</seg>
</tuv>
<tuv xml:lang="zh_CN">
<seg>输入并管理产品详细信息。</seg>
</tuv>
谢谢!
解决方案
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 包来读取数据、转换数据并将其写回,但这对于一次性的情况来说很好。
推荐阅读
- python-3.x - RegexpParser 在 JupyterLab 中使 Python 3.8.6 内核崩溃
- javascript - javascript中是否有删除以“<”开头并以“>”结尾的单词的功能?
- bash - 如何在终端上将所有目录中的文件重命名为相同的名称
- mysql - 从包含组的多个表中选择并加入
- ios - 我们可以通过 IOS API 在后台扫描 Ibeacons,只提供 Major 和 Minot 编号作为参数吗?
- python - 无法删除 Python3.5
- python - 如何从 Django-solo 获取对象?
- c# - 我们是否有适用于 V4 协议的 sagepay C# 直接集成工具包?
- linux - 如何在 chromebook 中从 .Desktop 文件为 linux 启动 Qt 应用程序?
- c# - C#中的MongoDB - 执行多重过滤的正确方法是什么