2009-10-27 29 views
38

Có một lớp lót để đọc tất cả các dòng của một tập tin bằng Python, chứ không phải là tiêu chuẩn:Python file Slurp

f = open('x.txt') 
cts = f.read() 
f.close() 

Có vẻ như thế này được thực hiện như vậy thường là có nhận được một one- lót. Bất kỳ ý tưởng?

+13

Hài hước, tôi cần điều này một lần nữa và tôi googled cho nó. Không bao giờ nghĩ rằng câu hỏi của riêng tôi sẽ đến :) –

+0

Tôi cũng tiếp tục tìm thấy điều này khi tôi thực sự tìm kiếm http://stackoverflow.com/questions/1450393/how-do-you-read-from-stdin-in-python – tripleee

Trả lời

87

này sẽ húp nội dung vào một chuỗi duy nhất trong Python 2.6 trở lên:

with open('x.txt') as x: f = x.read() 

Và điều này sẽ tạo ra một danh sách các dòng:

with open('x.txt') as x: f = x.readlines() 

Những phương pháp đảm bảo đóng cửa ngay lập tức của tệp đầu vào ngay sau khi đọc.

Footnote:

  1. Cách tiếp cận này cũng có thể được sử dụng trong Python 2.5 sử dụng from __future__ import with_statement.

Một cách tiếp cận cũ không đảm bảo đóng cửa ngay lập tức là sử dụng này để tạo ra một chuỗi duy nhất:

f = open('x.txt').read() 

Và điều này để tạo ra một danh sách các dòng:

f = open('x.txt').readlines() 

Trong thực tế, nó sẽ được đóng ngay lập tức trong một số phiên bản của CPython, nhưng đã đóng "chỉ khi rác thu thập được xung quanh nó "trong Jython, IronPython, và có lẽ một số phiên bản tương lai của CPython.

+0

Đó là những gì tôi đã đoán, nhưng không biết khi nào tập tin được mở sẽ được đóng lại. Cảm ơn! –

-1

Nếu bạn đang ở trên Python3, chắc chắn rằng bạn đúng cách tôn trọng mã hóa đầu vào của tập tin của bạn, ví dụ .:

import codecs 
with codecs.open(filename, 'r', encoding="utf8") as file: 
    cts = file.read() 

Tìm danh sách các tên codec trong Python3 codec list. (Cơ chế này cũng được khuyến khích cho Python2 bất cứ khi nào bạn mong đợi bất kỳ đầu vào không phải ASCII nào)

+0

Tôi muốn biết tại sao điều này bị bỏ phiếu. –

+2

Một số người có thể coi vấn đề mã hóa là không có chủ đề. Ngoài ra, mã của tôi không phải là tối thiểu: sử dụng builtin'open' như trong 'open (filename, 'r', encoding = 'utf8')' sẽ lưu câu lệnh import và làm cho câu trả lời phù hợp hơn với câu hỏi. –

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