Python hỗ trợ xử lý file built-in, không cần thư viện ngoài. Có 2 loại file: Text file (chữ, đọc được) và Binary file (nhị phân: ảnh, exe, zip).
Các chế độ mở file (Mode)
| Mode | Mô tả | Con trỏ | Tạo file mới? |
|---|---|---|---|
'r' | Đọc (read only) | Đầu file | Không (lỗi nếu không tồn tại) |
'r+' | Đọc và ghi | Đầu file | Không |
'w' | Ghi (write only) - ghi đè | Đầu file | Có |
'w+' | Đọc và ghi - ghi đè | Đầu file | Có |
'a' | Ghi thêm (append) | Cuối file | Có |
'a+' | Đọc và ghi thêm | Cuối file | Có |
'b' | Binary mode (kết hợp: 'rb', 'wb', 'ab') | - | - |
Ghi file (Write)
# Mở file chế độ 'w' (tạo mới hoặc ghi đè)
file = open('sample.txt', 'w', encoding='utf-8')
# write(): ghi một chuỗi
file.write("Tôi là lập trình viên Python.\nTôi rất vui.")
# writelines(): ghi nhiều dòng từ iterable (không tự thêm \n)
lines = ['Dòng 1\n', 'Dòng 2\n', 'Dòng 3\n']
file.writelines(lines)
file.close() # BẮT BUỘC đóng fileBest practice: dùng context manager with (tự động đóng file, an toàn exception):
with open('sample.txt', 'w', encoding='utf-8') as file:
file.write("Dòng đầu tiên\n")
file.write("Dòng thứ hai\n")Đọc file (Read)
with open('sample.txt', 'r', encoding='utf-8') as file:
# read(): đọc toàn bộ thành 1 string
content = file.read()
print(content)
# readline(): đọc 1 dòng
# file.seek(0) # quay về đầu file
# line = file.readline()
# readlines(): đọc tất cả dòng thành list
# file.seek(0)
# lines = file.readlines()Kết quả
Tôi là lập trình viên Python. Tôi rất vui.
Đọc file lớn hiệu quả (line by line)
with open('large_file.log', 'r') as f:
for line in f: # iterator, không load hết vào RAM
process(line)Kết luận
Luôn dùng with open(...) as f: để quản lý tài nguyên tự động. Chỉ định encoding='utf-8' cho text file tiếng Việt. Dùng read() cho file nhỏ, loop line-by-line cho file lớn.