2012-12-18 24 views
15

Có cách nào kiểm tra xem tệp đã được tạo bởi pickle không? Tôi chỉ có thể bắt ngoại lệ được ném bởi pickle.load nhưng không có ngoại lệ cụ thể "không phải là tệp dưa".Làm thế nào để kiểm tra xem một tập tin đã được tạo ra bởi dưa chua?

+9

Kiểm tra dấu vết của dấm và thì là –

+0

Bạn có lo lắng về việc liệu tệp đã được tạo * khi bạn vừa sử dụng 'pickle.dump' hay liệu tệp có tồn tại khi bạn sử dụng' pickle.load' không? Trong cả hai trường hợp, lỗi sẽ xảy ra khi bạn mở bộ xử lý tệp cho đầu ra hoặc đầu vào, không phải trong dòng 'pickle' thực tế. –

+0

Tôi không lo lắng về việc liệu tệp có tồn tại hay không nhưng về việc liệu một tệp tồn tại đã được tạo bởi 'pickle' hay chưa. – Erik

Trả lời

8

Tệp yêu cầu không có tiêu đề, vì vậy không có cách nào tiêu chuẩn để xác định chúng thiếu cố gắng giải thích một và xem có bất kỳ ngoại lệ nào được nêu ra trong khi làm như vậy hay không.

Bạn có thể xác định giao thức nâng cao của riêng mình bao gồm một số loại tiêu đề bằng cách phân lớp các lớp Pickler()Unpickler() trong mô-đun pickle. Tuy nhiên, điều này không thể thực hiện được với mô-đun cPickle nhanh hơn nhiều vì có các chức năng của nhà máy trong đó không thể được phân loại là [1].

Cách tiếp cận linh hoạt hơn sẽ xác định các lớp độc lập của riêng bạn đã sử dụng các trường hợp Pickler()Unpickler() tương ứng từ một trong các mô-đun này trong quá trình triển khai.

Cập nhật

Byte cuối cùng của tất cả các file dưa nên là pickle.STOP opcode, như vậy trong khi không có một tiêu đề, có hiệu quả một trailer rất tối thiểu đó sẽ là một điều tương đối đơn giản để kiểm tra.

Tùy thuộc vào mức sử dụng chính xác của bạn, bạn có thể thoát khỏi việc bổ sung thêm thông tin chi tiết hơn vì bất kỳ dữ liệu nào qua mã vạch STOP trong biểu diễn của đối tượng đã được bỏ qua [2].

[1]     Footnote [2] trong tài liệu Python 2.
[2]     Tài liệu cho pickle.loads(), cũng áp dụng cho pickle.load() vì nó hiện đang được triển khai dưới dạng thứ hai.
7

Không có cách nào chắc chắn hơn là cố gắng giải thích nó và bắt ngoại lệ.

Các vấn đề liên quan