Trong Python, xử lý file là một trong những nhiệm vụ không thể thiếu, trong quá trình làm việc bạn sẽ cần những thao tác với file như upload, đọc, ghi, xóa file.
Mở & đóng File
Bạn có thể mở một file bằng hàm open()
để mở file, và hàm close()
để đóng file sau khi bạn thao tác xong.
# Mở một file
file = open(file_path, mode, encoding="utf-8")
#Ví dụ:
file = open("filename.txt", "r")
#đóng file
file.close()
Trong đó:
file_path: là đường dẫn tới file cần đọc (ví dụ D:/document/test.txt hoặc /var/www/data/test.txt)
mode là chế độ đọc file bao gồm:
'r'
: chỉ đọc.'rb'
: Mở một file chỉ để đọc ở định dạng nhị phân. Con trỏ tập tin được đặt ở đầu file.'r+'
: Mở một tập tin cho cả đọc và viết. Con trỏ tập tin được đặt ở đầu tập tin.'rb+'
: Mở một file để đọc và ghi ở định dạng nhị phân. Con trỏ được đặt ở đầu file.'w'
: mở và ghi file, nếu file chưa tồn tại sẽ tạo file mới, hoặc sẽ ghi đè lên file đã tồn tại.'w+'
: Mở một file để ghi và đọc. Ghi đè nếu file tồn tại. Nếu không tồn tại, một file mới để đọc và ghi được tạo.'x'
: không thành công nếu tệp đã tồn tại.'a'
: có thể đọc, nối thêm dữ liệu, con trỏ tệp nằm ở cuối file nếu tồn tại, nếu file không tồn tại, nó sẽ tạo một tệp mới để ghi..'b'
: mở file ở chế độ nhị phân.'t'
: mở file ở chế độ văn bản(texts)'+'
: mở file dưới chế độ có thể đọc/ghi.
Đọc file
Sử dụng phương thức .read()
Để đọc nội dung của một file trong Python, bạn có thể sử dụng phương thức .read()
của đối tượng file. Dưới đây là một ví dụ cụ thể:
# Mở file để đọc
file = open('example.txt', 'r')
# Đọc nội dung của file và lưu vào biến content
content = file.read()
# In ra nội dung của file
print(content)
# Đóng file sau khi đã đọc xong
file.close()
Sử dụng Context Manager
Bạn cũng có thể sử dụng context manager (with
statement) để tự động đóng file sau khi đã sử dụng xong, giúp mã nguồn trở nên gọn gàng và an toàn hơn:
with open('example.txt', 'r') as file:
content = file.read()
print(content)
Trong thực tế người ta sẽ sử dụng Context Manager nhiều hơn với lý do: tự động đóng file(tránh tình trạng quên đóng, gây lãng phí tài nguyên, mất an toàn), cú pháp dễ đọc, ngắn gọn.
Ghi file
Sử dụng phương thức .write()
Để ghi dữ liệu vào một file trong Python, bạn có thể sử dụng phương thức .write()
của đối tượng file. Dưới đây là cách ghi dữ liệu vào file:
# Mở hoặc tạo một file để ghi
file = open('example.txt', 'w')
# Ghi dữ liệu vào file
file.write('Hello, world!\n')
file.write('This is a test.\n')
# Đóng file sau khi ghi xong
file.close()
Trong đó:
open('example.txt', 'w')
mở fileexample.txt
để ghi ('w'
). Nếu file không tồn tại, nó sẽ được tạo mới. Nếu file đã tồn tại, nội dung cũ sẽ bị ghi đè..write('Hello, world!\n')
ghi dòng văn bản'Hello, world!'
vào file, kết thúc bằng một dấu xuống dòng (\n
).file.close()
đóng file sau khi đã ghi xong.
Sử dụng Context Manager
Bạn cũng có thể sử dụng context manager (with
statement) để tự động đóng file sau khi đã sử dụng xong:
with open('example.txt', 'w') as file:
file.write('Hello, world!\n')
file.write('This is a test.\n')
Người ta thường sử dụng cách này trong các dự án thực tế, nguyên nhân bạn có thể xem lại phần Đọc File.
Đổi tên file
Trong Python, hàm đổi tên thường được sử dụng để thay đổi tên của một biến, một hàm, hoặc một đối tượng khác sang một tên mới. Cú pháp cơ bản của hàm đổi tên là rename()
, và nó thường được sử dụng cùng với module os
hoặc shutil
.
import os
# Đổi tên file "old_file.txt" thành "new_file.txt"
os.rename("old_file.txt", "new_file.txt")
Chú ý: hàm os.rename()
sẽ có exception OSError
nếu file đã tồn tại hoặc nếu không thể thực hiện thay đổi tên vì một lý do nào đó, như không có quyền truy cập hoặc file không tồn tại.
Xóa file
Để xóa một file trong Python, bạn có thể sử dụng hàm os.remove()
hoặc os.unlink()
. Dưới đây là cách sử dụng cơ bản của hàm os.remove()
:
import os
# Đường dẫn đến file cần xóa
file_path ="example.txt"
# Xóa file
os.remove(file_path)
Tương tự ví dụ về unlink
import os
# Đường dẫn đến file cần xóa
file_path ="example.txt"
# Xóa file
os.unlink(file_path)
Tại sao cần đóng file sau khi thao tác xong?
Trong lập trình việc đóng file sau khi sử dụng là rất quan trọng, với những file nhỏ, có thể bạn không cảm thấy việc này cần thiết. Tuy nhiên, khi làm việc với tệp tin lớn, đôi khi bạn sẽ gặp phải những lỗi không đáng có từ nó. Dưới đây là một số lý do quan trọng tại sao cần đóng file sau khi sử dụng:
-
Giải phóng tài nguyên: Mỗi lần mở file, hệ điều hành sẽ phải cấp phát tài nguyên hệ thống (như bộ nhớ và bộ xử lý) cho file đó. Khi không còn cần thiết sử dụng file nữa, việc đóng file giải phóng tài nguyên này, giúp hệ thống hoạt động hiệu quả hơn và tránh tình trạng lãng phí tài nguyên.
-
Đảm bảo dữ liệu được ghi xong: Khi ghi dữ liệu vào file, dữ liệu thường được ghi đệm vào RAM trước khi thực sự được ghi vào ổ cứng. Đóng file sau khi ghi dữ liệu đảm bảo rằng tất cả các dữ liệu được ghi đến file đã được xử lý và ghi vào ổ đĩa, giúp tránh tình trạng mất dữ liệu (nó giống trường hợp soạn thảo xong mà không bấm lưu 😁😁😁).
-
Nhất quán dữ liệu, tránh xung đột: khi bạn sử dụng file, file đó sẽ bị khóa (lock) không ai có thể ghi nội dung mới cho file đó nữa. Do đó khi sử dụng xong, bạn hãy đóng file lại để tiến trình khác có thể thực hiện nếu có.
Tổng hợp một số phương thức thao tác với file hoặc thư mục directory
Tổng hợp phương thức thao tác với File
-
open(): Mở một file để đọc, ghi hoặc thực hiện các thao tác khác. Trả về một đối tượng file.
-
close(): Đóng file đã mở. Điều này cần thiết để giải phóng tài nguyên hệ thống và đảm bảo tính nhất quán của dữ liệu.
-
read(size): Đọc và trả về một lượng bytes cụ thể từ file. Nếu không có tham số size, nó sẽ đọc toàn bộ file.
-
readline(size): Đọc và trả về một dòng từ file. Nếu không có tham số size, nó sẽ đọc toàn bộ dòng.
-
readlines(): Đọc và trả về tất cả các dòng từ file dưới dạng một danh sách các chuỗi.
-
write(string): Ghi dữ liệu vào file. Phải mở file với chế độ ghi trước khi sử dụng hàm này.
-
writelines(lines): Ghi danh sách các chuỗi vào file. Mỗi phần tử trong danh sách sẽ được ghi vào một dòng riêng biệt.
-
seek(offset, whence): Di chuyển con trỏ đọc/ghi đến vị trí được chỉ định trong file. Tham số
offset
là khoảng cách từ vị trí được xác định bởi tham sốwhence
. -
tell(): Trả về vị trí hiện tại của con trỏ đọc/ghi trong file.
-
flush(): Đẩy dữ liệu từ bộ nhớ đệm xuống ổ đĩa mà không đóng file.
-
truncate(size=None): Cắt bớt file ở vị trí hiện tại hoặc cắt bớt đến kích thước cụ thể.
Tổng hợp phương thức thao tác với thưc mục (directory)
-
mkdir(): Tạo một thư mục mới. Nếu thư mục đã tồn tại, hàm này sẽ gây ra một
FileExistsError
. -
makedirs(): Tạo một thư mục mới, bao gồm tất cả các thư mục trung gian cần thiết. Nếu các thư mục trung gian đã tồn tại, nó sẽ bỏ qua chúng.
-
rmdir(): Xóa một thư mục trống. Nếu thư mục không trống, hàm này sẽ gây ra một
OSError
. -
removedirs(): Xóa một thư mục và tất cả các thư mục trung gian cần thiết để đến thư mục đó. Nếu có các tệp hoặc thư mục khác tồn tại trong thư mục cuối cùng sau khi xóa, chúng sẽ không bị xóa.
-
listdir(): Liệt kê tất cả các tệp và thư mục trong một thư mục đã cho. Trả về một danh sách các chuỗi.
-
chdir(): Thay đổi thư mục làm việc hiện tại đến một đường dẫn đã cho.
-
getcwd(): Trả về đường dẫn đến thư mục làm việc hiện tại.
-
rename(): Đổi tên hoặc di chuyển một thư mục hoặc tệp.
-
walk(): Lặp qua tất cả các thư mục, bao gồm cả thư mục con và tệp tin bên trong thư mục đã cho.
-
path.exists(): Kiểm tra xem một đường dẫn đã cho có tồn tại hay không.