我有这个awk / sed命令
awk '{full=full$0}END{print full;}' initial.xml | sed 's|</Product>|</Product>\
|g' > final.xml
打破包含大量标签的XML文档 这样新文件将在一行中包含产品节点的所有内容
我正在尝试使用os.system和subprocess模块运行它,但是这会将文件的所有内容包装成一行。
任何人都可以将其转换为等效的python脚本吗? 谢谢!
答案 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方言。)