2013-07-31 2 views
0

I 종류의 XML 파일이파이썬과 아름다운 수프 - 값을 받고 텍스트 파일에 저장

<file> 
<record> 
<type>a</type> 
<number>2</number> 
</record> 

<record> 
<type>b</type> 
<number>9</number> 
</record> 

등과 같은 관련 정보의 많은 레코드가 들어있는

내가 원하는 BS 모든 XML 파일을 읽어과 열의에 의해 나에게 결과를 제공하기 위해 :

2

B (9) 등

EDIT

xml 파서가 설치되어 있고 bs4 xml 모드를 사용하고 있습니다. 내가 얻을 그러나 나는 더 이상 오류가 발생하지 않습니다

AB

2 9

대신

을 2

B (9)

새로운 코드 :

from bs4 import BeautifulSoup 
soup = BeautifulSoup(open('file.xml'),"xml") 

with open('output.txt') as f: 
    for type1,number in (soup.findall('type'),soup.findall('number')): 
    f.write ('%s\t%s\n' % (type1.text, number.text)) 

2 편집 :

나는 XML 파일에서 3 레코드를 추가 할 경우에, 나는 다음과 같은 오류

역 추적 (마지막으로 가장 최근에 호출) 수 : 을에 파일 "multixmlsript.py", 8 호선을, (soup.findAll ('유형'), soup.findAll ('수'))의 타입 1, 번호 : ValueError를이 : 너무 많은 값은 당신이 HTML위한 것입니다 BeautifulSoup을 사용했다

+0

BeautifulSoup은 XML이 아닌 HTML에 더 적합합니다. 최소한'lxml'을 설치하고 BS가 행동을 적절하게 조정하도록하기 위해'BeautifulSoup (file, parser = 'xml')'을 사용하십시오. –

+0

실제로'TypeError'를 throw하는 코드를 보여 주거나 적어도 전체 추적에서만. 오류 메시지가 여기에있는 것과 일치하지 않습니다. –

답변

0
from BeautifulSoup import BeautifulStoneSoup 

soup = BeautifulStoneSoup(open('path/to/file')) 

with open('/path/to/output.txt', 'w') as f: 
    for i in range(len(soup.findAll('type'))): 
     f.write ('%s\t%s\n' % (soup.findAll('type')[i].text, soup.findAll('number')[i].text)) 

압축을 풀 수 있습니다. 그러나 xml에 BeautifulStoneSoup을 사용해야합니다. 이게 당신을 도울 수 있기를 바랍니다.

+0

감사합니다. 이제는 모든 값이 출력되지만 하나의 단일 행에 유형을 넣고 다른 행에 숫자를 넣습니다. – user2633192

+0

열을 기준으로 저장할 수있는 방법이 있습니까? – user2633192

+0

감사합니다. 작동합니다! – user2633192

관련 문제