Tuy nhiên, tốt hơn là liên kết đối tượng tệp với một biến để bạn có thể gọi close
trên nó ngay khi bạn thực hiện xong. Ví dụ, đối với một tệp văn bản
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]
Có bốn cách để đọc nội dung của tệp văn bản cùng một lúc dưới dạng danh sách các chuỗi, mỗi chuỗi một dòng
list_of_all_the_lines = file_object.readlines[ ] list_of_all_the_lines = file_object.read[ ].splitlines[1] list_of_all_the_lines = file_object.read[].splitlines[ ] list_of_all_the_lines = file_object.read[ ].split['\n']
Hai cách đầu tiên để lại một '\n'
ở cuối mỗi dòng [i. e. , trong mỗi mục chuỗi trong danh sách kết quả], trong khi hai cách còn lại loại bỏ tất cả các ký tự '\n'
ở cuối. Cách đầu tiên trong bốn cách này là cách nhanh nhất và Pythonic nhất. Trong Python 2. 2 trở về sau có cách thứ 5 tương đương với cách thứ nhất
list_of_all_the_lines = list[file_object]
Trừ khi tệp bạn đang đọc thực sự lớn, còn không thì việc đưa tất cả vào bộ nhớ trong một lần nhấp là cách nhanh nhất và nói chung là thuận tiện nhất cho bất kỳ quá trình xử lý tiếp theo nào. Hàm tích hợp
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]0 tạo đối tượng tệp Python. Với đối tượng đó, bạn gọi phương thức
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]1 để lấy tất cả nội dung [dù là văn bản hay nhị phân] dưới dạng một chuỗi lớn duy nhất. Nếu nội dung là văn bản, bạn có thể chọn ngay lập tức tách chuỗi đó thành danh sách các dòng, bằng phương pháp
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]2 hoặc bằng phương pháp chuyên biệt
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]3. Vì việc chia tách như vậy là một nhu cầu thường xuyên, bạn cũng có thể gọi trực tiếp ____________ trên đối tượng tệp, để thao tác nhanh hơn và thuận tiện hơn một chút. Trong Python 2. 2, bạn cũng có thể chuyển trực tiếp đối tượng tệp làm đối số duy nhất cho loại tích hợp sẵn
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]5
Trên các hệ thống tương tự Unix và Unix, chẳng hạn như các biến thể Linux và BSD, không có sự phân biệt thực sự giữa tệp văn bản và tệp dữ liệu nhị phân. Tuy nhiên, trên các hệ thống Windows và Macintosh, các dấu kết thúc dòng trong tệp văn bản không được mã hóa bằng dấu phân cách '\n'
tiêu chuẩn, mà bằng dấu phân cách
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]7 và
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]8 tương ứng. Python thay mặt bạn dịch các ký tự kết thúc dòng thành
'\n'
, nhưng điều này có nghĩa là bạn cần thông báo cho Python biết khi mở tệp nhị phân để nó không thực hiện dịch. Để làm điều đó, hãy sử dụng list_of_all_the_lines = file_object.readlines[ ] list_of_all_the_lines = file_object.read[ ].splitlines[1] list_of_all_the_lines = file_object.read[].splitlines[ ] list_of_all_the_lines = file_object.read[ ].split['\n']0 làm đối số thứ hai cho
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]0. Điều này là vô hại ngay cả trên các nền tảng giống Unix và ngay cả ở đó, đó là một thói quen tốt để phân biệt tệp nhị phân với tệp văn bản, mặc dù điều đó không bắt buộc trong trường hợp đó. Một thói quen tốt như vậy sẽ làm cho chương trình của bạn dễ hiểu hơn, cũng như cho phép bạn di chuyển chúng giữa các nền tảng dễ dàng hơn
Bạn có thể gọi các phương thức như
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]1 trực tiếp trên đối tượng tệp do hàm
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]0 tạo ra, như được hiển thị trong đoạn mã đầu tiên của giải pháp. Khi bạn thực hiện việc này, ngay sau khi thao tác đọc kết thúc, bạn không còn tham chiếu đến đối tượng tệp nữa. Trong thực tế, Python nhận thấy thiếu tham chiếu ngay lập tức và ngay lập tức đóng tệp. Tuy nhiên, tốt hơn là gắn một tên với kết quả của
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]0, để bạn có thể tự gọi
close
một cách rõ ràng khi hoàn thành tệp. Điều này đảm bảo rằng tệp luôn mở trong thời gian ngắn nhất có thể, ngay cả trên các nền tảng như Jython và các phiên bản giả định trong tương lai của Python trên đó các cơ chế thu gom rác tiên tiến hơn có thể trì hoãn việc đóng tự động mà Python thực hiệnNếu bạn chọn đọc từng tệp một, thay vì đọc tất cả cùng một lúc, các thành ngữ sẽ khác. Đây là cách đọc tệp nhị phân 100 byte mỗi lần, cho đến khi bạn đọc đến cuối tệp
file_object = open['abinfile', 'rb'] while 1: chunk = file_object.read[100] if not chunk: break do_something_with[chunk] file_object.close[ ]
Truyền đối số
list_of_all_the_lines = file_object.readlines[ ] list_of_all_the_lines = file_object.read[ ].splitlines[1] list_of_all_the_lines = file_object.read[].splitlines[ ] list_of_all_the_lines = file_object.read[ ].split['\n']6 cho phương thức
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]1 đảm bảo rằng
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]1 sẽ chỉ đọc
list_of_all_the_lines = file_object.readlines[ ] list_of_all_the_lines = file_object.read[ ].splitlines[1] list_of_all_the_lines = file_object.read[].splitlines[ ] list_of_all_the_lines = file_object.read[ ].split['\n']6 byte tiếp theo [hoặc ít hơn, nếu tệp gần cuối].
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]1 trả về chuỗi rỗng khi đến cuối tệp
Đọc một tệp văn bản một dòng tại một thời điểm là một nhiệm vụ thường xuyên. Trong Python 2. 2 trở lên, đây là cách tiếp cận dễ nhất, rõ ràng nhất và nhanh nhất
for line in open['thefile.txt']: do_something_with[line]
Một số thành ngữ phổ biến trong các phiên bản Python cũ hơn. Một thành ngữ mà bạn có thể chắc chắn sẽ hoạt động ngay cả trên các phiên bản Python cực kỳ cũ, chẳng hạn như 1. 5. 2, khá giống với thành ngữ để đọc một tệp nhị phân một đoạn tại một thời điểm
file_object = open['thefile.txt'] while 1: line = file_object.readline[ ] if not line: break do_something_with[line] file_object.close[ ]
list_of_all_the_lines = list[file_object]1, giống như
file_object = open['thefile.txt'] all_the_text = file_object.read[ ] file_object.close[ ]1, trả về chuỗi trống khi đến cuối tệp. Lưu ý rằng phần cuối của tệp có thể dễ dàng phân biệt với một dòng trống vì dòng sau được trả về bởi
list_of_all_the_lines = list[file_object]1 là
'\n'
, đây không phải là một chuỗi trống mà là một chuỗi có độ dài 1công thức 4. 3;