Đọc tập tin văn bản thuần
Giả sử có tập tindemo.txt với nội dung như sau:
hello
world
Đọc toàn bộ nội dung
with open('demo.txt', 'r', encoding='utf-8') as file:
content = file.read()
print(content)
Ở đây, chế độ 'r' là đọc (read-only), và tham số encoding='utf-8' đảm bảo xử lý đúng định dạng ký tự. Nếu tập tin không nằm cùng thư mục với script, cần cung cấp đường dẫn tuyệt đối.
Đọc từng dòng
with open('demo.txt', 'r', encoding='utf-8') as file:
first_line = file.readline() # Đọc dòng đầu tiên (kèm ký tự xuống dòng)
second_line = file.readline() # Đọc dòng tiếp theo
print(first_line)
print(second_line)
Duyệt qua từng dòng bằng vòng lặp
with open('demo.txt', 'r', encoding='utf-8') as file:
for line in file: # Tương đương file.readlines(), nhưng hiệu quả hơn về bộ nhớ
print(line) # Mỗi dòng bao gồm ký tự xuống dòng ở cuối
Ghi vào tập tin văn bản
Ghi một chuỗi văn bản
text = '''hello
world
'''
with open('demo2.txt', 'w', encoding='utf-8') as file:
file.write(text)
Chế độ 'w' sẽ tạo mới tập tin nếu chưa tồn tại (thư mục chứa phải có sẵn), hoặc ghi đè toàn bộ nội dung nếu tập tin đã có.
Ghi danh sách các dòng
lines = ['hello\n', 'world\n']
with open('demo2.txt', 'w', encoding='utf-8') as file:
file.writelines(lines)
Lưu ý: writelines() không tự động thêm ký tự xuống dòng — bạn phải chèn \n vào từng phần tử.
Quản lý tài nguyên với with
Cú pháp with open(...) đảm bảo tập tin được đóng tự động ngay cả khi xảy ra lỗi:
with open('demo.txt', 'r', encoding='utf-8') as f:
data = f.read()
# Tập tin đã được đóng tại đây, không thể truy cập f nữa
print(data)
Đọc/ghi tập tin nhị phân
Để xử lý ảnh, âm thanh, hoặc dữ liệu nhị phân khác, dùng chế độ'rb' (đọc nhị phân) và 'wb' (ghi nhị phân):
# Sao chép ảnh
with open('hua.jpg', 'rb') as src:
binary_data = src.read()
with open('hua_copy.jpg', 'wb') as dst:
dst.write(binary_data)
Khi làm việc với chế độ nhị phân, không cần và không được chỉ định encoding.
Các chế độ mở tập tin
| Mã | Mô tả |
|---|---|
r | Chỉ đọc (mặc định). Con trỏ ở đầu tập tin. |
rb | Đọc nhị phân. Dùng cho ảnh, video, v.v. |
w | Ghi mới. Xóa nội dung cũ nếu tồn tại; tạo mới nếu chưa có. |
wb | Ghi nhị phân mới. |
a | Ghi nối (append). Con trỏ ở cuối tập tin. |
ab | Nối dữ liệu nhị phân. |
r+ | Đọc và ghi. Con trỏ ở đầu. |
rb+ | Đọc/ghi nhị phân. |
w+ | Đọc/ghi, xóa nội dung cũ. |
wb+ | Đọc/ghi nhị phân, xóa nội dung cũ. |
a+ | Đọc và nối. Con trỏ ban đầu ở cuối. |
ab+ | Đọc/nối nhị phân. |
x | Tạo mới để ghi. Báo lỗi nếu tập tin đã tồn tại. |
t | Chế độ văn bản (mặc định, thường không cần ghi rõ). |
Lưu ý: Chế độ U (Universal newlines) đã bị loại bỏ từ Python 3.
Xử lý định dạng tập tin chuyên biệt
Python hỗ trợ đọc/ghi nhiều định dạng phổ biến thông qua thư viện chuẩn hoặc bên thứ ba:- INI: dùng
configparser - CSV: dùng
csv - Excel: dùng
openpyxlhoặcpandas - JSON: dùng
json - YAML: dùng thư viện
PyYAML