Chuẩn bị tệp ngay trong thư mục bài tập
Tạo một thư mục thực hành riêng, lưu mã dưới tên `tep_van_ban.py` rồi chạy trong chính thư mục ấy. Bài này dùng dữ liệu giả, không cần dùng điểm thật. Tên tệp `ghi_chu.txt` là đường dẫn tương đối: Python tìm nó theo thư mục làm việc khi chạy chương trình.
Ghi mới, ghi thêm rồi đọc lại
Mã hoàn chỉnh:
```python
with open("ghi_chu.txt", "w", encoding="utf-8") as f:
print("Lan 8.0", file=f)
print("Minh 7.5", file=f)
with open("ghi_chu.txt", "a", encoding="utf-8") as f:
print("Vy 9.0", file=f)
with open("ghi_chu.txt", "r", encoding="utf-8") as f:
for dong in f:
print(dong.strip())
```
Kết quả là ba dòng `Lan 8.0`, `Minh 7.5`, `Vy 9.0`. Chế độ `w` tạo tệp mới hoặc xóa nội dung cũ rồi ghi từ đầu; `a` ghi tiếp ở cuối; `r` chỉ đọc và cần tệp đã tồn tại. Chạy lại cả chương trình vẫn có đúng ba dòng vì bước `w` bắt đầu lại. Khối `with` tự đóng tệp khi kết thúc. Ghi rõ `encoding="utf-8"` giúp đọc, ghi tiếng Việt nhất quán giữa các máy; nếu bỏ tham số này, Python dùng mã hóa mặc định của môi trường, không thể kết luận rằng nó chỉ đọc được ASCII.
Chọn cách đọc theo nhiệm vụ
`f.readline()` lấy một dòng tiếp theo; đến hết tệp trả chuỗi rỗng. `f.readlines()` lấy các dòng còn lại thành danh sách, còn `for dong in f:` duyệt từng dòng mà không cần đưa toàn bộ tệp vào danh sách trước. Dòng đọc thường chứa kí tự xuống dòng; `strip()` bỏ khoảng trắng ở hai đầu để in gọn. Thử đổi `a` thành `w` ở khối thứ hai: tệp chỉ còn dòng `Vy 9.0`; đó là dấu hiệu đã ghi đè.
Bài luyện
Chế độ mở tệp nào ghi thêm vào cuối mà giữ nội dung cũ?
r dùng để đọc.
w ghi lại từ đầu và làm mất nội dung cũ.
a ghi tiếp ở cuối.
x tạo tệp mới, không phải ghi tiếp.
Lời giải
Muốn giữ dữ liệu đã có và thêm dòng mới ở cuối, mở tệp với chế độ "a".
Bài luyện
Sau khi chạy lại toàn bộ chương trình mẫu, tệp `ghi_chu.txt` có bao nhiêu dòng?
Khối ghi tiếp thêm dòng thứ ba.
Khối w khởi tạo hai dòng; khối a thêm một dòng.
Khối w không giữ dữ liệu lần chạy trước.
Mỗi lần chạy không cộng dồn vì có khối w.
Lời giải
Mỗi lần chạy, w khởi tạo lại tệp với hai dòng, sau đó a thêm dòng thứ ba.
Bài luyện
Vì sao chương trình ghi `encoding="utf-8"` khi làm việc với văn bản tiếng Việt?
Cùng mã hóa giúp đọc lại kí tự đúng.
Mã hóa không sắp xếp.
w vẫn ghi đè.
with quản lí việc đóng tệp.
Lời giải
UTF-8 xác định cách chuyển kí tự thành byte và ngược lại, tránh phụ thuộc mã hóa mặc định của máy.
Đang học