0

我有这个 awk/sed 命令

awk '{full=full$0}END{print full;}' initial.xml | sed 's|</Product>|</Product>\
|g' > final.xml

打破包含大量标签的 XML 文档,以便新文件在一行中包含产品节点的所有内容

我正在尝试使用 os.system 和 subprocess 模块运行它,但是这会将文件的所有内容包装到一行中。

任何人都可以将其转换为等效的 python 脚本吗?谢谢!

4

1 回答 1

1

像这样的东西?

from __future__ import print_function
import fileinput
for line in fileinput.input('initial.xml'):
    print(line.rstrip('\n').replace('</Product>','</Product>\n'),end='')

我使用该print函数是因为printPython 2.x 中的默认值会在每组输出后添加一个空格或换行符。 有多种其他方法可以解决这个问题,其中一些涉及在打印之前缓冲输出。

作为记录,您的问题同样可以通过一个简单的 awk 脚本来解决。

awk '{ gsub(/<Product>/,"&\n"); printf $0 }' initial.xml

在没有尾随换行符的情况下打印输出将比缓冲整个文件然后在最后打印它要高效得多,当然,Awk 也具有执行替换的所有必要功能。(gsub但并非在所有 Awk 方言中都可用。)

于 2013-08-30T13:10:49.730 回答