2013-08-30 34 views
0

我有此AWK/sed命令Python的當量此sed的命令

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

打破含有大量標籤的XML文檔 ,使得新的文件將具有產品節點的所有內容在一個單一的線

我想使用os.system和subprocess模塊​​來運行它,但是這是將文件的所有內容封裝到一行中。

任何人都可以將它轉換成等效的Python腳本? 謝謝!

+1

爲什麼不使用XML解析器呢?看看[ElementTree API](http://docs.python.org/2/library/xml.etree.elementtree.html)。 –

+0

您'awk'代碼看起來像是在'full'和'$ 0'之間缺少'+' –

+0

要添加到@MartijnPieters所說的內容,請查看[lxml庫](http://lxml.de/)。 –

回答

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的所有方言)