Chuỗi và tệp là hai thứ bạn dùng hằng ngày: xử lý văn bản, đọc và ghi dữ liệu lên đĩa.
- Dùng các phương thức xử lý chuỗi
- Cắt, nối, tìm, thay thế văn bản
- Đọc và ghi tệp văn bản bằng with open
- Làm việc với tệp CSV đơn giản
- Chuỗi (str)
- Dãy ký tự; không thể sửa từng ký tự, chỉ tạo chuỗi mới.
- Phương thức
- Hàm gắn với một kiểu dữ liệu, gọi bằng dấu chấm:
s.upper(). - Mã hóa (encoding)
- Cách lưu ký tự thành byte; tiếng Việt dùng
utf-8. - Đường dẫn
- Vị trí tệp: tuyệt đối hoặc tương đối thư mục hiện tại.
Khái niệm và lý thuyết
Chuỗi là dãy ký tự. Máy lưu mỗi ký tự bằng một mã số theo bảng mã; tiếng Việt cần bảng mã Unicode (UTF-8) để hiển thị đúng dấu. Chuỗi có chỉ số như danh sách (s[0] là ký tự đầu) nhưng không sửa được từng ký tự; mọi phương thức như upper(), replace() đều trả về một chuỗi mới, chuỗi gốc giữ nguyên.
Tệp là nơi dữ liệu được lưu lâu dài trên ổ đĩa. Bộ nhớ trong (RAM) mất dữ liệu khi tắt chương trình, còn tệp thì còn. Làm việc với tệp luôn theo ba bước: mở, đọc hoặc ghi, đóng. Khối with open(...) tự động đóng tệp, tránh quên đóng gây mất dữ liệu hoặc khóa tệp.
| Loại tệp | Đặc điểm | Dùng cho |
|---|---|---|
| Văn bản (.txt) | Chữ thuần, đọc bằng mọi trình soạn thảo | Ghi chú, nhật ký |
| CSV | Bảng, các cột cách nhau dấu phẩy | Dữ liệu bảng, xuất từ Excel |
| JSON | Dữ liệu lồng nhau dạng khóa-giá trị | Cấu hình, trao đổi dữ liệu web |
Đường dẫn có thể tuyệt đối (C:\\du-an\\a.txt) hoặc tương đối so với thư mục đang chạy (du-lieu/a.txt). Đường dẫn tương đối giúp dự án chạy được trên máy khác.
Xử lý chuỗi
s = " Xin chào Python "
print(s.strip()) # bỏ khoảng trắng hai đầu
print(s.upper(), s.lower())
print(s.replace("Python", "Việt Nam"))
print("a,b,c".split(",")) # ['a', 'b', 'c']
print("-".join(["a", "b"])) # a-b
print(s.strip().startswith("Xin"))
print(s.find("chào")) # vị trí hoặc -1Đọc và ghi tệp
# Ghi
with open("ghi_chu.txt", "w", encoding="utf-8") as f:
f.write("Dòng 1\n")
f.write("Dòng 2\n")
# Đọc cả tệp
with open("ghi_chu.txt", encoding="utf-8") as f:
noi_dung = f.read()
# Đọc từng dòng
with open("ghi_chu.txt", encoding="utf-8") as f:
for dong in f:
print(dong.strip())| Chế độ | Ý nghĩa |
|---|---|
| "r" | đọc (mặc định) |
| "w" | ghi, xóa nội dung cũ |
| "a" | ghi nối thêm vào cuối |
with tự đóng tệp khi xong, kể cả khi có lỗi.
Ví dụ: đếm số từ trong một tệp văn bản
with open("van_ban.txt", encoding="utf-8") as f:
noi_dung = f.read()
tu = noi_dung.split()
print("Số từ:", len(tu))
with open("ket_qua.txt", "w", encoding="utf-8") as f:
f.write("Tổng số từ: " + str(len(tu)))Câu lệnh with tự đóng tệp khi xong, bạn khỏi lo quên. Luôn ghi rõ encoding="utf-8" để tiếng Việt không bị lỗi font. Nếu tệp không tồn tại, Python báo FileNotFoundError; đảm bảo tệp nằm cùng thư mục với chương trình.
Tệp CSV
import csv
with open("diem.csv", encoding="utf-8", newline="") as f:
for dong in csv.DictReader(f):
print(dong["ten"], dong["diem"])Đọc tệp bai_van.txt, đếm số từ và từ xuất hiện nhiều nhất.
from collections import Counter
with open("bai_van.txt", encoding="utf-8") as f:
tu = f.read().lower().split()
print(len(tu))
print(Counter(tu).most_common(3))Luôn khai báo encoding="utf-8" khi làm việc với tiếng Việt để tránh lỗi font.
Chế độ "w" xóa sạch tệp cũ. Muốn giữ dữ liệu cũ hãy dùng "a".
- Nhập một câu, in số từ và đảo ngược các từ.
- Ghi 10 số ngẫu nhiên vào tệp, rồi đọc lại và tính tổng.
- Kiểm tra chuỗi có phải email đơn giản (có @ và dấu chấm).
- Viết nhật ký: mỗi lần chạy thêm một dòng kèm thời gian.
- Chuỗi có nhiều phương thức: strip, split, join, replace, find.
- Dùng
with open(...)để đọc/ghi tệp. - Chế độ r, w, a; luôn dùng utf-8.
- Module csv đọc bảng dữ liệu nhanh.