Hàm open[]
trả về một đối tượng tệp, có phương thức read[]
để đọc nội dung của tệp
Nếu tệp nằm ở một vị trí khác, bạn sẽ phải chỉ định đường dẫn tệp, như thế này
Ví dụ
Mở tệp trên một vị trí khác
f = mở["D. \\myfiles\chào mừng. txt", "r"]
in [f. đọc[]]
Chỉ đọc các phần của tệp
Theo mặc định, phương thức read[]
trả về toàn bộ văn bản, nhưng bạn cũng có thể chỉ định số lượng ký tự bạn muốn trả về
Ví dụ
Trả về 5 ký tự đầu tiên của tệp
f = open["tệp demo. txt", "r"]
in [f. đọc [5]]
Học cách lọc dữ liệu bằng Python như một nhà phân tích dữ liệu
Thử tham gia các buổi đào tạo thực hành với hướng dẫn từng bước từ chuyên gia. Hãy thử dự án có hướng dẫn được thực hiện với sự cộng tác của Coursera ngay bây giờ
Get startedđọc dòng
Bạn có thể trả về một dòng bằng cách sử dụng phương thức readline[]
Ví dụ
Đọc một dòng của tập tin
f = open["tệp demo. txt", "r"]
in [f. dòng đọc[]]
Bằng cách gọi readline[]
hai lần, bạn có thể đọc hai dòng đầu tiên
Ví dụ
Đọc hai dòng của tập tin
f = open["tệp demo. txt", "r"]
in [f. dòng đọc[]]
in [f. dòng đọc[]]
Bằng cách lặp qua các dòng của tệp, bạn có thể đọc toàn bộ tệp, từng dòng một
Ví dụ
Lặp qua từng dòng tệp
f = open["tệp demo. txt", "r"]
cho x trong f
in[x]
Đóng tệp
Đó là một thực hành tốt để luôn đóng tệp khi bạn hoàn thành nó
Ví dụ
Đóng tệp khi bạn hoàn thành với nó
f = open["tệp demo. txt", "r"]
in [f. dòng đọc[]]
f. đóng[]
Ghi chú. Bạn phải luôn đóng tệp của mình, trong một số trường hợp, do lưu vào bộ đệm, các thay đổi được thực hiện đối với tệp có thể không hiển thị cho đến khi bạn đóng tệp
Để làm việc với dữ liệu được lưu trữ, việc xử lý tệp trở thành kiến thức cốt lõi của mọi lập trình viên Python chuyên nghiệp. Ngay từ lần phát hành đầu tiên, cả việc đọc và ghi dữ liệu vào tệp đều là các tính năng Python tích hợp sẵn. So với các ngôn ngữ lập trình khác như C hay Java, nó khá đơn giản và chỉ yêu cầu một vài dòng mã. Hơn nữa, không có mô-đun bổ sung nào phải được tải để thực hiện đúng cách
Trong bài viết này, chúng tôi sẽ giải thích cách đọc tệp bằng Python thông qua các ví dụ. Một số ví dụ bao gồm đọc tệp theo từng dòng, dưới dạng một đoạn [một số dòng được xác định tại một thời điểm] và đọc tệp trong một lần. Ngoài ra, chúng tôi sẽ chỉ cho bạn cách chỉ đọc một dòng cụ thể từ tệp mà không cần tìm kiếm toàn bộ tệp
Khái niệm cơ bản về tệp trong Python
Các phương pháp phổ biến để thao tác với tệp là open[]
để mở tệp, seek[]
để đặt vị trí hiện tại của tệp ở độ lệch đã cho và close[]
để đóng đối tượng tệp khi bạn sử dụng xong. Hàm open[]
tích hợp trả về một điều khiển tệp đại diện cho một đối tượng tệp được sử dụng để truy cập tệp để đọc, viết hoặc nối thêm
Khi mở tệp để đọc, Python cần biết chính xác cách mở tệp bằng hệ thống. Có sẵn hai chế độ truy cập - đọc và đọc ở chế độ nhị phân. Các cờ tương ứng được sử dụng là 'r'
và 'rb'
và phải được chỉ định khi mở tệp có chức năng open[]
tích hợp. Chế độ đầu tiên bao gồm việc diễn giải các ký tự đặc biệt như "CR" [trả về xuống dòng] và "LF" [dấu dòng] để biểu thị ngắt dòng, trong khi chế độ nhị phân cho phép bạn đọc dữ liệu ở chế độ thô - nơi dữ liệu được lưu trữ nguyên trạng.
Khi bạn đã mở một tệp, hàm open[]
sẽ trả về một đối tượng tệp cho bạn. Các đối tượng tệp này có các phương thức như read[]
, readline[]
, seek[]
0, seek[]
1 và seek[]
. Trong khi một số đối tượng tệp [hoặc đối tượng giống như tệp] có nhiều phương thức hơn những đối tượng được liệt kê ở đây, thì đây là những đối tượng phổ biến nhất. Không phải tất cả các đối tượng tệp cần triển khai tất cả các phương thức tệp
Đọc từng dòng tệp
Ví dụ đầu tiên lấy cảm hứng từ hai ngôn ngữ lập trình - C và C++. Đây có lẽ là cách tiếp cận trực quan nhất - mở tệp bằng hàm open[]
, đọc tệp theo từng dòng bằng phương pháp readline[]
và xuất dòng ngay sau khi đọc
Được sử dụng ở đây là một vòng lặp seek[]
5 liên tục đọc từ tệp miễn là phương thức readline[]
tiếp tục trả về dữ liệu. Trong trường hợp đến cuối tệp [EOF], vòng lặp seek[]
5 dừng và đối tượng tệp được đóng lại, giải phóng tài nguyên cho các chương trình khác sử dụng
Như bạn có thể đã lưu ý, chúng tôi đã mở và đóng tệp một cách rõ ràng trong ví dụ này. Mặc dù trình thông dịch Python tự động đóng các tệp đã mở khi kết thúc quá trình thực thi chương trình Python, nhưng việc đóng tệp một cách rõ ràng qua close[]
là một phong cách lập trình tốt và không nên quên
Là một cải tiến, giao thức trình vòng lặp tiện lợi đã được giới thiệu trong Python 2. 3. Điều này cho phép bạn đơn giản hóa vòng lặp seek[]
9
Được sử dụng ở đây là một vòng lặp close[]
0 kết hợp với trình vòng lặp close[]
1. Dòng hiện tại được xác định với sự trợ giúp của trình vòng lặp close[]
1, được đọc từ tệp và nội dung của nó được xuất ra thành close[]
3. Python bao việc mở và đóng tệp cho bạn khi nó nằm ngoài phạm vi. Mặc dù không hiệu quả nhưng điều này cho phép bạn không phải xử lý các tệp xử lý nữa
Thật không may, mã ở trên ít rõ ràng hơn và dựa vào bộ sưu tập rác nội bộ của Python để xử lý việc đóng tệp
Được giới thiệu trong Python 2. 5, lệnh close[]
4 gói gọn toàn bộ quy trình hơn nữa, đồng thời xử lý việc mở và đóng tệp chỉ một lần trong toàn bộ khối mã được xác định phạm vi
Sự kết hợp của câu lệnh close[]
4 và lệnh open[]
chỉ mở tệp một lần. Nếu thành công, vòng lặp close[]
0 được thực thi và nội dung của dòng được in trên close[]
3
Hơn nữa, việc sử dụng câu lệnh close[]
4 có tác dụng phụ. Bên trong, trình thông dịch Python tạo một khối open[]
0-open[]
1 để đóng gói việc đọc từ tệp. Ví dụ sau đây cho thấy những gì cơ bản đang xảy ra bên trong Python với các khối mã close[]
4
Đọc một tệp dưới dạng các dòng
Cho đến nay, chúng tôi đã xử lý từng dòng một tệp. Điều này khá chậm đối với các tệp lớn và có thể được cải thiện bằng cách đọc nhiều dòng cùng một lúc. Để đạt được điều đó, phương pháp open[]
3 từ mô-đun itertools phát huy tác dụng. Ngoài ra, nó hoạt động như một trình vòng lặp và trả về một đoạn dữ liệu bao gồm _______ 4 dòng. Khi kết thúc tệp, kết quả có thể ngắn hơn và cuối cùng, cuộc gọi sẽ trả về một danh sách trống
Đọc một dòng cụ thể từ một tệp
Sử dụng các phương pháp được hiển thị ở trên, chúng tôi cũng có thể thực hiện các hành động hữu ích khác, chẳng hạn như đọc một dòng cụ thể từ một tệp. Để làm điều này, chúng tôi sử dụng một bộ đếm và in dòng thích hợp khi chúng tôi đến đó trong khi lặp qua tệp
Điều này sẽ đơn giản để hiểu, nhưng nó dài hơn một chút so với các ví dụ trước. Nó có thể được rút ngắn bằng cách sử dụng mô-đun linecache
Ví dụ sau đây cho thấy cách đơn giản hóa mã bằng phương pháp open[]
5. Nếu số dòng được yêu cầu nằm ngoài phạm vi các dòng hợp lệ trong tệp, thì phương thức open[]
5 sẽ trả về một chuỗi trống thay thế
Đọc toàn bộ tệp cùng một lúc
Cuối cùng nhưng không kém phần quan trọng, chúng ta sẽ xem xét một trường hợp rất khác so với ví dụ trước - đọc toàn bộ tệp trong một lần
Hãy nhớ rằng trong hầu hết các trường hợp, bạn nên có đủ bộ nhớ để đọc toàn bộ tệp, vì các ký tự không chiếm quá nhiều dung lượng, nhưng hãy cảm thấy mệt mỏi với các tệp lớn. Ví dụ sau sử dụng kết hợp câu lệnh close[]
4 và phương thức read[]
. Trong trường hợp này, chúng tôi sẽ sử dụng read[]
để tải nội dung tệp dưới dạng luồng dữ liệu
Hãy xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, tiêu chuẩn được ngành chấp nhận và bao gồm bảng gian lận. Dừng các lệnh Git trên Google và thực sự tìm hiểu nó
Python cũng cung cấp phương thức 'r'
0, tương tự như phương thức readline[]
trong ví dụ đầu tiên. Ngược lại với read[]
, nội dung tệp được lưu trữ trong một danh sách, trong đó mỗi dòng nội dung là một mục
Mặc dù 'r'
0 sẽ đọc nội dung từ tệp cho đến khi chạm vào EOF, hãy nhớ rằng bạn cũng có thể giới hạn lượng nội dung được đọc bằng cách cung cấp tham số 'r'
4, là số byte cần đọc
Phần kết luận
Như thường lệ, có nhiều cách để đọc nội dung của tệp. Về tốc độ, tất cả chúng đều ít nhiều trong cùng một loại. Giải pháp nào phù hợp nhất với bạn tùy thuộc vào trường hợp sử dụng cụ thể của bạn. Chúng tôi nghĩ rằng sẽ rất hữu ích khi xem những gì có thể và sau đó chọn giải pháp phù hợp nhất
Mặc dù Python đơn giản hóa đáng kể quá trình đọc tệp, nhưng đôi khi nó vẫn có thể trở nên phức tạp, trong trường hợp đó, tôi khuyên bạn nên xem tài liệu Python chính thức để biết thêm thông tin