Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Xử lý file và thư mục trong Python
Trong bài viết này ta sẽ tìm hiểu về các hoạt động với file trong Python như: mở file, đọc file, ghi file, đóng file, ... và các phương thức xử lý file khác.
1. Sơ lược về xử lý file trong Python
File là một tệp được người dùng máy tính sử dụng để lưu trữ dữ liệu của họ, nó sẽ được lưu trữ trên ổ đĩa vĩnh viễn trừ khi ổ đĩa bị hỏng hoặc bạn xóa nó.
Khi làm việc với file thì chúng ta sẽ có những hành động chính như sau:
- Mở, tạo file
- Thay đổi dữ liệu của file
- Xóa file
- Di chuyển file
- Copy file
- ...
Đối với một phiên làm việc với file trong Python thì sẽ có ba bước chính như sau:
Bài viết này được đăng tại [free tuts .net]
- Mở file, nếu file cần mở không tồn tại thì tạo file mới.
- Thay đổi dữ liệu của file
- Đóng file
Bây giờ chúng ta sẽ tìm hiểu chi tiết hơn từng thao tác nhé.
2. Mở file với open() trong Python?
Python cung cấp cho chúng ta một hàm có tên là open()
, hàm này có cú pháp như sau:
f = open("location_file", "mode")
Trong đó location_file
là đường dẫn trỏ đến file cần mở, còn mode
là chế độ mở file. Bảng dưới đây là danh sách các chế độ mở file thường gặp.
Mode | Description |
---|---|
'r' | Mở file ở chế độ đọc (mặc định) |
'w' | Mở file ở chế độ ghi, tạo file mới nếu file không tồn tại, làm sạch file nếu nó đã tồn tại |
'x' | Mở file ở chế độ tạo mới, nếu file đã tồn tại thì sẽ bị báo lỗi |
'a' | Mở file ở chế độ ghi tiếp theo ở phân cuối của file, tạo mới nếu nó không tồn tại |
't' | Mở file ở chế độ dữ liệu kiểu text (mặc định) |
'b' | Mở file ở chế độ dữ liệu kiểu nhị phần binary |
'+' | Mở file ở cả hai chế độ đọc và ghi |
f = open("test.txt") # equivalent to 'r' or 'rt' f = open("test.txt",'w') # write in text mode f = open("img.bmp",'r+b') # read and write in binary mode
Như vậy bạn có thể sử dụng một hoặc nhiều chế độ trong cùng một phiên mở file.
Không giống như các ngôn ngữ khác, ký tự 'a
' không phải là số 97 trong bảng mã ASCII (hoặc mã hóa tương đương khác), nó sẽ phụ thuộc vào nền tảng mà bạn đang sư dụng. Trong Window thì là 'cp1252
' nhưng trong Linux thì 'utf-8
', vì vậy, chúng ta không nên sử dụng mã hóa mặc định mà chỉ rõ trong lúc mở file.
f = open("test.txt",mode = 'r',encoding = 'utf-8')
3. Đóng kế nối với close() trong Python
Khi ta mở một file và xử lý xong thì nên đóng file đó lại để đảm bảo tính an toàn, và để làm điều này thì ta sử dụng hàm close()
.
f = open("test.txt",encoding = 'utf-8') # perform file operations f.close(
Phương thức này sẽ không an toàn trong một số trường hợp, nó sẽ không tự đóng file nếu trong quá trình mở và ghi bị lỗi. Để khắc phục vấn đề này thì ta sử dụng từ khóa with, nó sẽ đảm bảo răng file sẽ luôn được đóng khi lệnh kết thúc.
with open("test.txt",encoding = 'utf-8') as f: # perform file operations
Và ta cũng không cần phải gọi hàm close()
vì nó tự động thực hiện ngầm.
4. Ghi file trong Python
Để ghi vào một file bằng Python thì bắt buộc chúng ta cần mở nó ở chế độ ghi 'w', nối thêm 'a' hoặc tạo mới 'x'. Chúng ta cần cẩn thận với chế độ 'w' vì nó sẽ ghi đè lên tệp nếu nó đã tồn tại, tất cả dữ liệu trước đó bị xóa.
with open("test.txt",'w',encoding = 'utf-8') as f: f.write("my first file\n") f.write("This file\n\n") f.write("contains three lines\n")
Chương trình này sẽ tạo một file tên là test.txt
nếu nó chưa tồn tại, còn nếu đã tồn tại thì dữ liệu trước đây sẽ bị xóa hết.
5. Đọc dữ liệu của file trong Python
Để đọc dữ liệu của file thì chúng ta phải mở nó ở chế độ reading (r), sau đó có thể sử dụng hàm read(size)
để để đọc dữ liệu của file, nếu bạn không truyền size thì nó sẽ đọc từ đầu đến cuối file.
>>> f = open("test.txt",'r',encoding = 'utf-8') >>> f.read(4) # read the first 4 data 'This' >>> f.read(4) # read the next 4 data ' is ' >>> f.read() # read in the rest till end of file 'my first file\nThis file\ncontains three lines\n' >>> f.read() # further reading returns empty sting ''
Làm thế nào để Python biết được là xuống dòng? Nó sẽ nhận biết thông qua ký tự thoát \n
.
Để lấy số dòng hiện tại đang đọc thì ta dùng hàm tell()
, và dùng hàm seek()
để di chuyển con trỏ đọc tới một vị trí nào đó.
>>> f.tell() # get the current file position 56 >>> f.seek(0) # bring file cursor to initial position 0 >>> print(f.read()) # read the entire file This is my first file This file contains three lines
Ngoài ra để đọc từng dòng thì ta có thể kết hơp với vòng lặp như ví dụ dưới đây.
>>> for line in f: ... print(line, end = '') ... This is my first file This file contains three lines
Mỗi lần lặp chính là một dòng dữ liệu của file.
Để đọc một dòng duy nhất thì ta dùng hàm readline()
, hàm này sẽ đọc dòng mới và sẽ ngưng khi kết thúc dòng đó.
>>> f.readline() 'This is my first file\n' >>> f.readline() 'This file\n' >>> f.readline() 'contains three lines\n' >>> f.readline() ''
Để đọc tất cả các dòng và trả về dạng list thì ta dùng hàm readlines()
.
>>> f.readlines() ['This is my first file\n', 'This file\n', 'contains three lines\n']
6. Lời kết
Trên là những thao tác cơ bản xử lý file trong Python, những thao tác này rất đơn giản nhưng lại rất hữu ích, hy vọng bài viết sẽ giúp được bạn trong quá trình học Python.