pythonic等效这个sed命令

时间:2013-08-30 11:10:31

标签: python sed

我有这个awk / sed命令

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

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

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

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

1 个答案:

答案 0 :(得分: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函数,因为Python 2.x中的默认print将在每组输出后添加空格或换行符。 There are various other ways to work around that,其中一些涉及在打印之前缓冲输出。

为了记录,您的问题同样可以通过简单的Awk脚本解决。

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

在没有尾随换行符的情况下打印输出将比缓冲整个文件然后在最后打印它更有效,当然,Awk也拥有完成替换的所有必要设施。 (gsub并不适用于所有Awk方言。)