Tôi đang cố gắng phân tích cú pháp * một tệp lớn (> 5 GB) dữ liệu đánh dấu có cấu trúc. Định dạng dữ liệu về cơ bản là XML nhưng không có phần tử gốc rõ ràng. Cách hiệu quả nhất để làm điều đó là gì?Phân tích cú pháp các tệp giả xml lớn trong python
Vấn đề với trình phân tích cú pháp SAX là chúng yêu cầu phần tử gốc, vì vậy tôi phải thêm phần tử giả vào luồng dữ liệu (có tương đương với chuỗi SequenceInputStream của Java trong Python không?) Hoặc tôi đã chuyển sang một trình phân tích cú pháp dựa trên sự kiện không tuân thủ SAX (có sự kế thừa của sgmllib không?)
Cấu trúc của dữ liệu khá đơn giản. Về cơ bản một danh sách các yếu tố:
<Document>
<docid>1</docid>
<text>foo</text>
</Document>
<Document>
<docid>2</docid>
<text>bar</text>
</Document>
* thực sự để lặp
Có phải 'return ''' thực sự là điều đúng đắn để thực hiện trên 'StopIteration'? Làm thế nào một khách hàng của mã đó sẽ nhận thấy EOF nếu nó chỉ sử dụng 'read()' sau đó? –
Một trong các thuộc tính của các đối tượng giống như dòng trong python là một cuộc gọi read() hoặc là các khối và trả về ít nhất một byte, hoặc trong trường hợp EOF, trả về chuỗi rỗng. Đó là cách phương thức file.read gốc hoạt động. – liori
Bạn có thể muốn sử dụng điều này cùng với PullDOM - nó kết hợp tính chất phát trực tiếp của SAX với bản chất phân cấp của DOM. – RichieHindle