Bằng cách nhấp vào Đăng nhập, bạn đồng ý Chính sách bảo mật và Điều khoản sử dụng của chúng tôi. Nếu đây không phải máy tính của bạn, để đảm bảo an toàn, hãy sử dụng Cửa sổ riêng tư (Tab ẩn danh) để đăng nhập (New Private Window / New Incognito Window).
Python có hỗ trợ xử lý file, đồng thời cũng cho phép người dùng tự xử lý tập tin, ví dụ: đọc & ghi file, cùng với nhiều lựa chọn công cụ xử lý file khác.
Khái niệm xử file là một tác vụ cần thiết, có ở hầu hết ngôn ngữ lập trình khác, nhưng việc triển khai nhiệm vụ này có thể phức tạp và dài dòng. Nhưng ở Python, quá trình này dễ dàng và ngắn gọn hơn hẳn.
Python xử lý tệp dưới dạng văn bản hoặc nhị phân. Điều này rất quan trọng. Mỗi dòng code bao gồm một chuỗi ký tự. Chúng tạo thành file văn bản. Mỗi dòng trong file được kết thúc bằng một ký tự đặc biệt, gọi là EOL hay ký tự kết thúc dòng, chẳng hạn như dấu phẩy hoặc ký tự báo dòng mới. Nó kết thúc dòng hiện tại và báo cho trình thông dịch biết một dòng mới bắt đầu.
Giờ hãy cùng nhau tìm hiểu chi tiết cách đọc và viết file trong Python như thế nào nhé!
File là gì?File hay còn gọi là tệp, tập tin. File là tập hợp của các thông tin được đặt tên và lưu trữ trên bộ nhớ máy tính như đĩa cứng, đĩa mềm, CD, DVD,...
Khi muốn đọc hoặc ghi file, chúng ta cần phải mở file trước. Khi hoàn thành, file cần phải được đóng lại để các tài nguyên được gắn với file được giải phóng.
Do đó, trong Python, một thao tác với file diễn ra theo thứ tự sau.
Trong Python, có một hàm được xây dựng sẵn phục vụ cho việc mở file: open(). Hàm này trả về đối tượng file hay còn gọi là “handle” vì bạn có thể thực hiện các hoạt động đọc, ghi, sửa đổi trên file đó.
>>> f = open("test.txt") # mở file cùng thư mục với file hiện tại>>> f = open("C:/Python33/README.txt") # mở file ở thư mục khác, đường dẫn đầy đủBạn có thể xác định cách thức mà tập tin được mở ra để làm gì như read, write, append,... Đây là thông số tùy chọn có thể có hoặc không. Ngoài ra bạn cũng có thể định rõ file mở ra dạng văn bản hay dạng nhị phân.
Chế độ truy cập file mặc định là read (r). Khi dùng mode này chúng ta sẽ nhận được giá trị chuỗi trả về dạng văn bản.
Mặt khác nếu giá trị trả về ở dạng byte thì tệp được mở ra là hình ảnh hoặc exe.
Dưới đây là danh sách các chế độ mode khác nhau khi mở một file:
MODEMÔ TẢKhi làm việc với các tệp ở chế độ văn bản, bạn nên chỉ định loại mã hóa.
f = open("test.txt",mode = 'r',encoding = 'utf-8')Sau khi thực hiện xong các thao tác với file thì bạn cần đóng nó lại.
Đóng file để đảm bảo quy chế đóng mở và giải phóng bộ nhớ cho chương trình nên điều này là cần thiết.
Việc đóng file được xây dựng trong Python bằng hàm close().
Python cũng tự động đóng một file khi đối tượng tham chiếu của file đã được tái gán cho một file khác. Tuy nhiên, sử dụng phương thức close() để đóng một file vẫn tốt hơn.
f = open("test.txt",encoding = 'utf-8')# thực hiện các thao tác với tệpf.close()Tuy nhiên cách này chưa thực sự đảm bảo. Vẫn có trường hợp một số ngoại lệ xảy ra khi chúng ta thực hiện các thao tác với file khiến chương trình tự động thoát ra mà không đóng tệp.
Để đảm bảo hơn, bạn nên sử dụng khối lệnh try...finally (finally sẽ luôn luôn được thực thi bất chấp có hay không ngoại lệ) ở đây.
try: f = open("test.txt",encoding = 'utf-8') # thực hiện các thao tác với tệpfinally: f.close()Bằng cách này, ta có thể yên tâm file được đóng đúng ngay cả khi phát sinh ngoại lệ khiến chương trình dừng đột ngột.
Một cách khác để đóng file là sử dụng câu lệnh with. Lệnh with cho chúng ta bảo đảm rằng file luôn luôn được đóng mà không cần biết những logic xử lý bên trong.
with open("test.txt",encoding = 'utf-8') as f: # thực hiện các thao tác với tệpSo sánh hai cách viết này thì chúng ta đã thấy rất rõ ràng rằng, sử dụng with cho chúng ta cách viết code ngắn gọn hơn hẳn.
Ghi File trong PythonĐể ghi một file ta cần mở file bằng cú pháp để ghi, sử dụng mode write ‘w’, append ‘a’ hoặc mode tạo độc quyền ‘x’
Bạn cần cẩn thận với chế độ ‘w’, vì nó ghi đè lên nội dung nếu file đã tồn tại, các dữ liệu trước đó sẽ bị xóa.
Nếu bạn ghi vào file dạng nhị phân các chuỗi văn bản hoặc chuỗi dạng byte thì kết quả trả về sẽ là số kí tự được ghi vào file.
with open("test.txt",'w',encoding = 'utf-8') as f: f.write("Quantrimang\n") f.write("Kiến thức - Kinh nghiệm - Hỏi đáp\n\n") f.write("Quantrimang.com\n")Với ví dụ trên, chương trình sẽ tạo một file có tên là test.txt nếu tệp chưa tồn tại, nếu tồn tại rồi sẽ bị ghi đè lên.
Sử dụng các kí tự ‘\n’ để phân biệt các dòng với nhau.
Kết quả được trả về là:
QuantrimangKiến thức - Kinh nghiệm - Hỏi đápQuantrimang.comTương tự ghi file, để đọc một file ta cần mở file bằng cú pháp để đọc, sử dụng mode read ‘r’.
Dùng read(size)
Sử dụng phương thức read(size) để lấy về dữ liệu có kích thước bằng size. Nếu để trống tham số này thì nó sẽ đọc hết file hoặc nếu file quá lớn thì nó sẽ đọc đến khi giới hạn của bộ nhớ cho phép.
f = open("test.txt",'r',encoding = 'utf-8')a = f.read(12) # đọc 12 kí tự đầu tiênprint('Nội dung 11 kí tự đầu là:\n', (a))b = f.read(35) # đọc 35 kí tự tiếp theoprint('Nội dung 35 kí tự tiếp theo là:\n', (b))c = f.read() # đọc phần còn lạiprint('Nội dung phần còn lại là:\n', (c))Chạy chương trình, kết quả trả về là:
Nội dung 12 kí tự đầu là: QuantrimangNội dung 35 kí tự tiếp theo là: Kiến thức - Kinh nghiệm - Hỏi đápNội dung phần còn lại là: Quantrimang.comDùng tell() và seek()
Ngoài ra, ta có phương thức tell() cho bạn biết vị trí hiện tại bên trong file. Nói cách khác, việc đọc và ghi tiếp theo sẽ diễn ra tiếp tục trên các byte đó.
Phương thức seek() thay đổi vị trí hiện tại bên trong file.
f = open("test.txt",'r',encoding = 'utf-8')a = f.read(12) # đọc 12 kí tự đầu tiênprint('Nội dung là: \n', (a))b = f.tell() # Kiểm tra vị trí hiện tạiprint ('Vị trí hiện tại: ', (b))f.seek(0) # Đặt lại vị trí con trỏ tại vị trí đầu filec = f.read()print('Nội dung mới là: \n', (c))Kết quả trả về:
Nội dung là: QuantrimangVị trí hiện tại: 13Nội dung mới là: QuantrimangKiến thức - Kinh nghiệm - Hỏi đápQuantrimang.comDùng readline()
Phương thức này cho phép đọc từng dòng trong file:
f = open("test.txt",'r',encoding = 'utf-8')a = f.readline()print ('Nội dung dòng đầu: ', (a))b = f.readline()print ('Nội dung dòng 2: ', (b))c = f.readline()print ('Nội dung dòng 3: ', (c))d = f.readline()print ('Nội dung dòng 4: ', (d))Kết quả in ra màn hình:
Nội dung dòng đầu: QuantrimangNội dung dòng 2: Kiến thức - Kinh nghiệm - Hỏi đápNội dung dòng 3:Nội dung dòng 4: Quantrimang.comDùng readlines()
Phương thức readlines() trả về toàn bộ các dòng còn lại trong file và trả về giá trị rỗng khi kết thúc file.
f = open("test.txt",'r',encoding = 'utf-8')a = f.readline()print ('Nội dung dòng đầu: ', (a))b = f.readlines()print ('Nội dung các dòng còn lại: \n', (b))c = f.readlines()print ('Nội dung các dòng còn lại: \n', (c))Kết quả hiện thị trên màn hình:
Nội dung dòng đầu: QuantrimangNội dung các dòng còn lại: ['Kiến thức - Kinh nghiệm - Hỏi đáp\n', '\n', 'Quantrimang.com\n']Nội dung các dòng còn lại: []Có rất nhiều phương thức khác nhau để làm việc với file được tích hợp sẵn trong Python, trong đó có một vài phương thức đã được Quantrimang tìm hiểu ở trên.
Bảng dưới đây là danh sách đầy đủ các phương thức dưới dạng text, các bạn tham khảo thêm.
PHƯƠNG THỨCMÔ TẢHôm nay bạn thế nào? Hãy nhấp vào một lựa chọn, nếu may mắn bạn sẽ được tặng 50.000 xu từ Lazi
Vui | Buồn | Bình thường |