Giả sử chúng tôi muốn thực hiện tương đương với file_get_content
của PHP.cách lấy nội dung của tệp ascii nhỏ trong python?
Phương pháp hay nhất là gì? (thanh lịch và đáng tin cậy)
Dưới đây là một số đề xuất, chúng có chính xác không?
sử dụng with
tuyên bố:
def file_get_contents(filename):
with file(filename) as f:
s = f.read()
return s
đang sử dụng tiêu chuẩn open()
an toàn không?
def file_get_contents(filename):
return open(filename).read()
Điều gì sẽ xảy ra với bộ mô tả tệp trong một trong hai giải pháp?
từ PEP 343: http://www.python.org/dev/peps/pep-0343 Lưu ý rằng chúng tôi không đảm bảo rằng điều khoản cuối cùng được thực thi ngay lập tức sau khi đối tượng máy phát điện trở nên không được sử dụng, mặc dù đây là làm thế nào nó sẽ làm việc trong CPython. Điều này tương tự như các tệp đóng tự động: trong khi việc triển khai tính tham chiếu như CPython deallocates một đối tượng ngay khi tham chiếu cuối cùng nó biến mất, việc triển khai sử dụng các thuật toán GC khác không thực hiện cùng một bảo đảm. Điều này áp dụng cho Jython, IronPython và có thể là Python chạy trên Parrot. – kriss
@kriss: Lưu ý rằng điều đó không mâu thuẫn với tuyên bố về việc chạy '__exit__' khi rời khỏi cơ thể - nó chỉ chi tiết những gì xảy ra nếu bạn ** không ** thoát khỏi cơ thể bằng cách tạo một trình phát bị treo trong trình quản lý ngữ cảnh, và làm thế nào python sẽ buộc nó để lại bằng cách nâng cao một ngoại lệ. – Brian