2011-10-27 42 views
7

Tôi đang cố gắng đọc một số lượng lớn các dòng từ đầu vào chuẩn với python.Python: Đọc số lượng lớn các dòng từ stdin

more hugefile.txt | python readstdin.py 

Vấn đề là chương trình bị treo ngay khi tôi đọc chỉ một dòng.

print sys.stdin.read(8) 
exit(1) 

Điều này in 8 byte đầu tiên nhưng sau đó tôi hy vọng nó chấm dứt nhưng không bao giờ. Tôi nghĩ rằng nó không thực sự chỉ đọc các byte đầu tiên nhưng cố gắng để đọc toàn bộ tập tin vào bộ nhớ.

Same vấn đề với sys.stdin.readline()

gì tôi thực sự muốn làm là tất nhiên để đọc tất cả các dòng nhưng với một bộ đệm vì vậy tôi không chạy ra khỏi bộ nhớ.

Tôi đang sử dụng python 2,6

+4

Tại sao bạn đang sử dụng thay vì hơn mèo hoặc thậm chí chỉ cần một chuyển hướng đơn giản stdin? –

+0

Tôi không thấy lý do nào khiến chương trình của bạn "đóng băng". Làm thế nào bạn phát hiện ra rằng nó bị đóng băng? –

+0

Ah tôi đã chạy nó từ cửa sổ dòng lệnh. Không có mèo trên cửa sổ. – Martin

Trả lời

11

này nên làm việc hiệu quả trong một Python hiện đại:

import sys 

for line in sys.stdin: 
    # do something... 
    print line, 

Bạn có thể chạy các kịch bản như thế này:

python readstdin.py < hugefile.txt 
+0

Bộ nhớ hoạt động như thế nào? Nó tải một dòng tại một thời điểm và loại bỏ nó khỏi bộ đệm khi dòng tiếp theo đọc trong? Cảm ơn –

+0

Có, đọc một dòng tại một thời điểm và đặt nó vào biến dòng. Các giá trị cũ cho dòng sẽ được khai hoang khi chúng bị mất. –

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