2.1 Đọc toàn bộ tệp
Trong Python có một vài cách để đọc các tập tin văn bản. Mỗi phương pháp có ưu điểm riêng và phù hợp cho các tình huống khác nhau. Những cách chính để đọc tập tin văn bản: đọc toàn bộ nội dung, đọc theo dòng, đọc với chỉ định số lượng ký tự và các cách khác.
Phương thức read()
đọc toàn bộ nội dung của tập tin vào một chuỗi.
file = open('example.txt', 'r')
content = file.read()
print(content)
file.close()
Đây là cách rất đơn giản để đọc tập tin — chỉ một lần gọi phương thức là bạn đã có toàn bộ nội dung trong chuỗi. Tuy nhiên, có nhược điểm: nếu tập tin có dung lượng lớn, ví dụ 200 MB log, thì sẽ đọc chậm và tốn bộ nhớ của ứng dụng nhanh chóng.
2.2 Đọc tất cả các dòng của tệp
Có một cách thay thế cho phương thức read()
— đó là phương thức readlines()
. Nó cũng đọc vào bộ nhớ toàn bộ tệp tin, nhưng trả về dưới dạng danh sách các dòng — mỗi dòng trong tệp sẽ là một dòng trong danh sách.
Phương thức readlines()
đọc tất cả các dòng của tập tin và trả về dưới dạng danh sách các dòng.
file = open('example.txt', 'r')
lines = file.readlines()
for line in lines:
print(line.strip()) # strip() loại bỏ khoảng trắng và ký tự xuống dòng
file.close()
Cách này có thể thuận tiện nếu bạn biết trước rằng cần xử lý nội dung tập tin theo từng dòng. Nhược điểm — phương pháp này có thể tiêu tốn nhiều bộ nhớ với các tệp tin lớn, vì tất cả các dòng được tải vào bộ nhớ.
2.3 Lặp qua các dòng của tệp
Đối tượng file
có sẵn một iterator, vì vậy bạn có thể duyệt qua nội dung của nó bằng vòng lặp for
. Điều này cho phép đọc tập tin theo từng dòng mà không cần tải toàn bộ tệp vào bộ nhớ.
Ví dụ:
file = open('example.txt', 'r')
for line in file:
print(line.strip())
file.close()
Phương thức này tối ưu hơn về mặt bộ nhớ đối với các tập tin lớn do từng dòng được đọc một. Tuy nhiên sẽ khó khăn hơn khi cần quay lại dòng trước hoặc thay đổi thứ tự đọc.
Hãy so sánh cách này với cách trước:
Sử dụng iterator | Sử dụng phương thức readlines() |
---|---|
|
|
Cách làm này đơn giản và nhanh chóng. Tuy nhiên, khi bạn làm việc với các dự án thực tế, đôi lúc việc tải toàn bộ dữ liệu vào bộ nhớ và xử lý tại đó sẽ nhanh hơn.
Các phương thức readline()
và readlines()
được sử dụng để đọc các dòng từ tệp, nhưng hoạt động khác nhau. readline()
đọc một dòng tại một thời điểm, cho phép bạn kiểm soát quá trình đọc mà không cần tải toàn bộ tệp vào bộ nhớ. Điều này tiện lợi khi cần xử lý tập tin theo dòng hoặc khi tập quá lớn để tải toàn bộ vào bộ nhớ.
readlines()
, ngược lại, đọc tất cả các dòng của tệp cùng một lúc và trả về dưới dạng danh sách. Phương thức này tiện lợi khi cần nhanh chóng lấy tất cả các dòng của tệp để xử lý tiếp. Tuy nhiên, nó tiêu tốn nhiều bộ nhớ hơn, đặc biệt với các tệp lớn, do toàn bộ tệp được tải vào bộ nhớ.
Tùy thuộc vào nhiệm vụ, readline()
có thể được ưu tiên khi cần tiết kiệm bộ nhớ và kiểm soát quá trình đọc, còn readlines()
thì thuận tiện khi cần nhanh chóng lấy tất cả các dòng của tệp để xử lý tiếp.
2.4 Đọc một phần của tệp
Nếu tệp quá lớn, bạn có thể đọc nó từng phần. Phương thức read(n)
có thể nhận tham số là n
— số lượng ký tự cần đọc. Nếu trong tệp có ít ký tự hơn n
, thì phương thức read()
chỉ đơn giản đọc đến cuối tệp.
Ví dụ:
file = open('example.txt', 'r')
content = file.read(10) # Đọc 10 ký tự đầu tiên
print(content)
file.close()
Điều này tiện lợi khi cần đọc các tập tin lớn từng phần hoặc xử lý các khối dữ liệu cố định. Nhưng cách tiếp cận này bỏ qua việc chia tập tin theo dòng — các dòng có thể bị gián đoạn ở giữa.
2.5 Đọc tập tin theo từng dòng
Nếu vì lý do nào đó bạn không muốn sử dụng iterator, bạn có thể đọc tập tin theo từng dòng một cách thủ công. Đối tượng file
có phương thức readline()
. Không nhầm lẫn với readlines()
.
Phương thức readline()
đọc một dòng từ tập tin mỗi lần.
Ví dụ:
file = open('example.txt', 'r')
line = file.readline()
while line:
print(line.strip())
line = file.readline()
file.close()
Trong ví dụ này, chúng ta đọc nội dung của tập tin theo từng dòng cho đến khi dòng đọc được rỗng.
GO TO FULL VERSION