* 구조화 된 마크 업 데이터의 큰 파일 (> 5GB)을 구문 분석하려고합니다. 데이터 형식은 기본적으로 XML이지만 명시 적 루트 요소는 없습니다. 가장 효율적인 방법은 무엇입니까?파이썬에서 큰 pseudo-xml 파일 구문 분석
SAX 파서의 문제점은 루트 요소가 필요하다는 것입니다. 그래서 데이터 스트림에 의사 요소를 추가해야합니다 (파이썬에서 Java의 SequenceInputStream에 해당합니까?) 또는 SAX가 아닌 이벤트 기반 파서를 준수합니다 (sgmllib의 후속 버전이 있습니까?)
데이터 구조가 매우 간단합니다. 요소의 기본적 목록 :
<Document>
<docid>1</docid>
<text>foo</text>
</Document>
<Document>
<docid>2</docid>
<text>bar</text>
</Document>
이 * 실제로 당신이
xml.sax.parse
에 '스트림'개체를 전달할 수 있다는
인가? 그 코드의 클라이언트가'read()'만을 사용했다면 EOF를 어떻게 알 수 있습니까? –
파이썬에서 스트림과 같은 객체의 속성 중 하나는 read() 호출이 적어도 하나의 바이트를 차단하고 반환하거나 EOF의 경우 빈 문자열을 반환한다는 것입니다. 이것이 원래의 file.read 메소드가 작동하는 방식입니다. – liori
PullDOM과 함께 사용하는 것이 좋습니다. SAX의 스트리밍 특성과 DOM의 계층 적 특성을 결합합니다. – RichieHindle