2010-06-29 12 views
5

Tôi có một máy phát điện cho một tập hợp lớn các mục. Tôi muốn lặp qua chúng một lần, xuất chúng ra một tập tin. Tuy nhiên, với định dạng tệp tôi hiện có, trước tiên tôi phải xuất số lượng mục tôi có. Tôi không muốn xây dựng một danh sách các mục trong bộ nhớ, vì có quá nhiều thứ trong số đó và sẽ tốn rất nhiều thời gian và trí nhớ. Có cách nào để lặp qua máy phát điện, nhận được chiều dài của nó, nhưng bằng cách nào đó có thể lặp lại thông qua nó một lần nữa sau đó, nhận được các mục tương tự?Python: nhận số lượng mục trong máy phát mà không lưu trữ các mục

Nếu không, tôi có thể đưa ra giải pháp nào khác cho vấn đề này?

Trả lời

5

Nếu bạn có thể tìm ra cách viết công thức để tính toán kích thước dựa trên các thông số kiểm soát bộ tạo, hãy thực hiện điều đó. Nếu không, tôi không nghĩ bạn sẽ tiết kiệm được nhiều thời gian.

Bao gồm trình tạo ở đây và chúng tôi sẽ cố gắng làm điều đó cho bạn!

+0

ah yep i realiezd này ngay sau khi tôi đăng =) – Claudiu

5

Điều này không thể thực hiện được. Một khi máy phát điện cạn kiệt, nó cần phải được xây dựng lại để sử dụng lại. Có thể xác định phương thức __len__() trên một đối tượng iterator nếu số lượng các mục được biết trước thời hạn, và sau đó len() có thể được gọi chống lại đối tượng iterator.

5

Tôi không nghĩ rằng có thể cho bất kỳ trình lặp lặp tổng quát nào. Bạn sẽ cần phải tìm ra cách máy phát điện ban đầu được xây dựng và sau đó tạo lại nó cho lần cuối cùng.

Ngoài ra, bạn có thể ghi kích thước giả vào tệp của mình, viết các mục và sau đó mở lại tệp để sửa đổi và sửa kích thước trong tiêu đề.

Nếu tệp của bạn là định dạng nhị phân, điều này có thể hoạt động khá tốt vì số byte cho kích thước giống nhau bất kể kích thước thực tế là gì. Nếu đó là định dạng văn bản, có thể bạn sẽ phải thêm một số chiều dài thêm vào tệp nếu bạn không thể dán kích thước giả để bao gồm tất cả các trường hợp. Xem this question để thảo luận về cách chèn và viết lại trong một tệp văn bản bằng Python.