2013-09-07 33 views
5

Trong một dự án thu thập dữ liệu nhỏ chúng tôi sử dụng pickle dữ liệu để lưu trữ ghi của Python, ví dụ cho mỗi "sự kiện" chúng tôi thêm nó vào tập tin đầu ra f vớiTải dữ liệu từ tệp tin Python trong một vòng lặp?

pkl.dump(event, f, pkl.HIGHEST_PROTOCOL) 

nơi import cPickle as pkl.

Trong phân tích các dữ liệu chúng ta đọc mỗi sự kiện, nhưng trái ngược với một tập tin bình thường, nơi chế biến có thể là một trong một cách khá thanh lịch:

with open(filename) as f: 
    for line in f: 
     do_something() 

Looping trên tất cả các dữ liệu trong một file dưa này trở nên hơi khó xử hơn:

with open(filename) as f: 
    try: 
     while True: 
      event = pkl.load(f) 
      do_something() 
    except (EOFError, UnpicklingError): 
     pass 

Có thể làm cho dưa chua đọc giống như ví dụ cho các tệp thông thường ở trên không?

Trả lời

9

Có, thực sự. Sử dụng máy phát điện này dưới đây để làm cho các sự kiện có thể đọc được trong một vòng lặp:

def pickleLoader(pklFile): 
    try: 
     while True: 
      yield pkl.load(pklFile) 
    except EOFError: 
     pass 

Bây giờ bạn chỉ có thể viết:

with open(filename) as f: 
    for event in pickleLoader(f): 
     do_something()