Người mới sử dụng Python tại đây. Tôi muốn đi qua một tệp mbox lớn, phân tích cú pháp email. Tôi có thể làm điều đó với:Phân tích cú pháp các tệp mbox bằng Python
import sys
import mailbox
def gen_summary(filename):
mbox = mailbox.mbox(filename)
for message in mbox:
subj = message['subject']
print subj
if __name__ == "__main__":
if len(sys.argv) != 2:
print 'Usage: python genarchivesum.py mbox'
sys.exit(1)
gen_summary(sys.argv[1])
Nhưng tôi cần kiểm soát nhiều hơn. Tôi cần để có thể có được vị trí byte của sự khởi đầu của một email nhất định trong tập tin mbox và tôi cũng cần phải nhận được số byte trong tin nhắn (như được đại diện trên đĩa). Và sau đó trong tương lai, thay vì lặp lại từ đầu tệp mbox, tôi cần có khả năng tìm kiếm một thông điệp cụ thể và chỉ phân tích cú pháp đó (do đó một trong những nhu cầu nhận vị trí byte trên đĩa). Đây là những tập tin mbox lớn và hiệu quả là một mối quan tâm.
Mục đích của tất cả điều này là để tôi có thể tạo tệp tóm tắt, chứa một số bit nhỏ về mỗi email trong mbox và sau đó trong tương lai, hãy tra cứu từng email trong mbox một cách hiệu quả.
Tôi chưa bao giờ sử dụng 'hộp thư', nhưng tôi chỉ đọc 'help (mailbox.mbox)'. Bạn không thể sử dụng phương thức '.iterkeys()' để nhận một vòng lặp của các giá trị khóa, và sau đó sử dụng các giá trị khóa để tìm các thông điệp? Tại sao bạn muốn sử dụng chỉ mục byte làm khóa để tìm thư thay vì sử dụng mô-đun ... bạn đã thử sử dụng mô đun để lập chỉ mục thư theo khóa chưa? Nếu bạn đã thử nó và nó quá chậm hoặc một cái gì đó, xin vui lòng nói như vậy. – steveha
Giả sử tôi có mbox 10.000 email. Tôi không muốn phải đọc/phân tích/lặp lại trên 9,998 người trong số họ khi tôi chỉ muốn email cuối cùng. Tôi muốn tìm đến điểm đó trong tệp mbox và chỉ đọc tin nhắn đó. –
@MarkFletcher Bạn có làm việc này không? Nếu vậy, xin vui lòng cho tôi biết. – kingmakerking