Trích xuất hiệu quả một vài dữ liệu từ một tệp XML lớn


2

Tôi cần trích xuất một vài nội dung trường từ một tệp XML lớn. Tôi hiện đang làm điều này mặc dù sự kết hợp của xmlstarlet và tập lệnh Python (sử dụng ElementTree). Ý tưởng là cắt tệp XML khỏi dữ liệu vô dụng với xmlstarlet và sau đó xử lý tệp nhỏ hơn bằng Python (sử dụng Python trực tiếp trên tệp không thể thực hiện được - bộ nhớ và CPU đã bị hỏng và một số tệp không bao giờ được xử lý). Về cơ bản nó hoạt động nhưng:

  • nó không hiệu quả
  • nó không đặc biệt linh hoạt
  • nó khá là xấu xí (ít nhất là mối quan tâm của tôi, nhưng vẫn là mối quan tâm từ góc độ bảo trì)

Tôi đang tìm kiếm lời khuyên về cách tốt nhất để xử lý một trường hợp như vậy (lượng dữ liệu được trích xuất là khoảng 5% của tệp ban đầu). Tôi cởi mở với bất cứ điều gì hợp lý (một ngôn ngữ cụ thể, có thể bỏ tệp XML vào DB và sau đó trích xuất những gì tôi cần trước khi bỏ DB?, ...)


Câu trả lời:


2

Bạn có đang sử dụng ElementTree iterparsekhông? Nó có thể xử lý hiệu quả các đầu vào lớn mà không cần phân tích toàn bộ cây trong bộ nhớ (thường là nơi các bánh xe đi ra khỏi trình phân tích cú pháp XML).

Bạn có thể tìm thấy nhiều trường hợp sử dụng và ví dụ trên stackoverflow.


Khong toi khong. Cảm ơn gợi ý - Tôi sẽ đọc và thực hiện và quay lại với phản hồi (và đánh dấu câu hỏi là đã trả lời)
WoJ

Các giải pháp với iterparse hoạt động tuyệt vời. Nó cải thiện thời gian phân tích cú pháp ít nhất là một thứ tự cường độ. Tôi vấp ngã, tuy nhiên, về một vấn đề nhưng tôi sẽ mở một câu hỏi riêng
WoJ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.