2012-05-05 41 views
7

Ngay bây giờ tôi đang viết một số mã Python để đối phó với các tập tin twitter lớn. Những tệp này quá lớn nên chúng không thể vừa với bộ nhớ. Để làm việc với họ, về cơ bản tôi có hai lựa chọn.Hiệu quả của từng dòng đọc tập tin trong Python

  1. Tôi có thể chia tệp thành các tệp nhỏ hơn có thể vừa với bộ nhớ.

  2. Tôi có thể xử lý dòng tệp lớn theo từng dòng nên tôi không bao giờ cần phải khớp toàn bộ tệp vào bộ nhớ cùng một lúc. Tôi thích thứ hai để dễ thực hiện.

Tuy nhiên, tôi tự hỏi liệu đọc nhanh hơn trong toàn bộ tệp vào bộ nhớ và sau đó điều khiển nó từ đó. Có vẻ như nó có thể chậm để liên tục đọc một dòng tập tin bằng đường truyền từ đĩa. Nhưng sau đó một lần nữa, tôi không hoàn toàn hiểu làm thế nào các quá trình này hoạt động trong Python. Có ai biết nếu dòng bởi đọc tập tin dòng sẽ làm cho mã của tôi được chậm hơn so với nếu tôi đọc toàn bộ tập tin vào bộ nhớ và chỉ thao tác nó từ đó?

+0

Tại sao không thử đọc từng dòng và xem? Nếu nó hoạt động cho bạn, thì nó tuyệt vời, và nó không giống như thay đổi nó từ đó sẽ là khó khăn. –

+1

nó sẽ luôn phụ thuộc vào khối lượng lớn "khổng lồ". – Shep

+0

Câu trả lời hữu ích hy vọng: http://stackoverflow.com/a/8717312/416626 – urschrei

Trả lời

9

Để đọc tệp nhanh, hãy xem mô-đun mmap. Điều này sẽ làm cho toàn bộ tập tin xuất hiện như một phần lớn của bộ nhớ ảo, ngay cả khi nó lớn hơn nhiều so với RAM có sẵn của bạn. Nếu tệp của bạn lớn hơn 3 hoặc 4 gigabyte, thì bạn sẽ muốn sử dụng hệ điều hành 64 bit (và bản dựng Python 64 bit).

Tôi đã thực hiện việc này cho các tệp có kích thước trên 30 GB với kết quả tốt.

1

Nếu bạn muốn xử lý dòng tập tin bằng cách dòng, bạn chỉ có thể sử dụng các đối tượng tập tin như một iterator:

for line in open('file', 'r'): 
    print line 

Đây là bộ nhớ khá hiệu quả; nếu bạn muốn làm việc trên một loạt các dòng cùng một lúc, bạn cũng có thể sử dụng phương thức readlines() của đối tượng tệp với tham số kích thước. Điều này đọc theo số kích thước byte cộng với đủ số byte để hoàn thành dòng cuối cùng.

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