0

この awk/sed コマンドがあります

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

多数のタグを含む XML ドキュメントを分割して、新しいファイルに製品ノードのすべてのコンテンツが 1 行に含まれるようにする

os.system と subprocess モジュールを使用して実行しようとしていますが、これはファイルのすべての内容を 1 行にまとめています。

誰でも同等の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='')

Python 2.x printのデフォルトでは、各出力セットの後にスペースまたは改行が追加されるため、この関数を使用しています。それを回避するには、他にもさまざまな方法があります。その中には、出力を印刷する前にバッファリングする方法があります。print

記録として、あなたの問題は単純な Awk スクリプトだけでも同様に解決できます。

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

末尾に改行を付けずに出力を出力する方が、ファイル全体をバッファリングして最後に出力するよりもはるかに効率的です。もちろん、Awk には、置換を行うために必要な機能もすべて備わっています。(gsubただし、Awk のすべての方言で使用できるわけではありません。)

于 2013-08-30T13:10:49.730 に答える