2013-08-30 9 views
0

나는 태그의 큰 숫자를 포함하는 XML 문서를 깰이 AWK/SED 명령파이썬 해당하는이 나오지 명령

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

에게이 같은 새로운 파일은 한 줄에 제품 노드의 모든 내용이있을 것이라는 점을

os.system 및 subprocess 모듈을 사용하여 실행하려고하지만 파일의 모든 내용을 한 줄로 묶습니다.

누구나 동등한 파이썬 스크립트로 변환 할 수 있습니까? 감사합니다.

+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

이와 비슷한? 파이썬 2.x에서의 기본 print 출력의 각 세트 뒤에 공백이나 줄 바꿈을 추가하기 때문에

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

나는 print 기능을 사용하고 있습니다. There are various other ways to work around that, 일부는 인쇄하기 전에 출력 버퍼링과 관련이 있습니다.

기록을 위해 문제는 간단한 Awk 스크립트에서 똑같이 해결할 수 있습니다.

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

인쇄 출력이 뒤에 줄 바꿈없이 도착하는대로는 마지막에 인쇄 한 후 전체 파일을 버퍼링하고보다 훨씬 더 효율적으로 될 것입니다, 그리고 물론, awk는이 작업을 수행하는 데 필요한 모든 시설을 갖추고 substition도 마찬가지입니다. (gsub은 Awk의 모든 방언에서 사용 가능하지 않습니다.)