Tổng Quan Về Thao Tác Nhập Xuất Tập Tin Trong Python

Cơ Chế Khởi Tạo Kết Nối Với Tập Tin

Việc khởi tạo kết nối vào hệ thống tệp thường sử dụng hàm mở rộng hoặc mô hình quản lý ngữ cảnh. Cách tiếp cận thứ nhất yêu cầu đóng cửa sổ thủ công sau khi hoàn thành quy trình.

f_handle = open("my_data.txt", "r", encoding="utf-8")
text_buffer = f_handle.read()
print(text_buffer)
f_handle.close()

Một phương pháp tối ưu hơn là sử dụng câu lệnh `with`. Cơ chế này tự động kích hoạt phương thức đóng file sau khi khối lệnh được thực thi xong, giúp loại bỏ rủi ro quên đóng tài nguyên.

with open("my_data.txt", "r", encoding="utf-8") as data_f:
    content = data_f.read()
    print(content)

Kỹ Thuật Tiếp Cận Dữ Liệu Bên Trong

Thư viện tiêu chuẩn hỗ trợ nhiều phương thức truy vấn nội dung khác nhau tùy thuộc vào mục đích hiệu năng.

  • read(): Trích xuất toàn bộ phần tử còn lại từ vị trí con trỏ hiện tại đến cuối tệp (tương tự đoạn code trên).
  • readline(): Lấy về một chuỗi bao gồm ký tự xuống dòng ở cuối mỗi lần gọi.
# Lấy từng dòng bằng vòng lặp
with open("my_data.txt", "r", encoding="utf-8") as f_reader:
    # Dòng đầu tiên
    first_line = f_reader.readline() 
    print(first_line, end="")

    # Đọc tiếp tục cho đến khi rỗng
    while first_line:
        first_line = f_reader.readline()
        print(first_line, end="")

Để chứa dữ liệu vào mảng để xử lý hàng loạt, ta dùng `readlines()`.

with open("my_data.txt", "r", encoding="utf-8") as f_iter:
    all_content = f_iter.readlines()
    # Kết quả sẽ là danh sách các chuỗi
    print(all_content)

Xử Lý Ghi Dữ Liệu Các Chế Độ

Cấu hình quyền ghi quyết định số phận của dữ liệu hiện hữu hoặc hành vi tạo mới.

Chế độ viết (w): Tép tin bị xoá sạch nội dung cũ hoặc được tạo mới nếu chưa tồn tại.

with open("output_01.txt", "w", encoding="utf-8") as f_write:
    # Không tự thêm ký tự ngắt dòng
    f_write.write("Dòng số 1\n\")
    f_write.write("Dòng số 2\n")

Chế độ bổ sung (a): Dữ liệu mới được đặt đuôi mà không ảnh hưởng nội dung cũ.

with open("output_01.txt", "a", encoding="utf-8") as f_append:
    f_append.write("Nội dung thêm vào cuối\n")

Chế độ đọc/ghi (r+): Cho phép đọc trước đó và ghi đè ngay sau điểm dừng con trỏ.

with open("output_01.txt", "r+", encoding="utf-8") as f_rw:
    line_start = f_rw.readline()
    f_rw.write("Nối thêm văn bản ngay tại đây")
    # Con trỏ đã di chuyển, việc read tiếp theo có thể trả về rỗng

Mục Lục Chèn Sửa Chuyên Sâu

Trường hợp cần chèn nội dung vào vị trí xác định trong một tệp văn bản, ta thực hiện tải về bộ nhớ, chỉnh sửa và lưu đè lại.

# Đọc toàn bộ dòng
with open("input_file.txt", "r", encoding="utf-8") as src:
    rows = src.readlines()

# Kiểm tra điều kiện an toàn
if len(rows) >= 3:
    # Chỉ định vị trí dòng thứ 3 (index 2) và ký tự thứ 5 (index 4)
    target_line = rows[2]
    if len(target_line) >= 5:
        chunk_before = target_line[:4]
        chunk_after = target_line[4:]
        rows[2] = f"{chunk_before}hello world{chunk_after}"

# Lưu lại thay đổi
with open("input_file.txt", "w", encoding="utf-8") as dest:
    dest.writelines(rows)

Ghi chú: Để làm việc với hình ảnh hay định dạng nhị phân, sử dụng cờ `'wb'` sẽ bắt buộc nhận đầu vào dưới dạng đối tượng byte.

Vận Hành Vòng Lập Qua Đối Tượng Tệp

Kết nối tệp trong Python được thiết kế như một vật thể lặp (iterator). Điều này cho phép duyệt qua từng dòng trực tiếp mà không cần chỉ định số lượng.

Khi cấu trúc lặp gặp đối tượng này, Python thực hiện lệnh đọc một dòng, gán cho biến tạm, rồi chuyển sang lần lặp tiếp theo cho đến khi hết dữ liệu. Tính năng này giảm thiểu việc quản lý con trỏ thủ công và tiết kiệm bộ nhớ so với việc nạp toàn bộ vào RAM.

with open("input_file.txt", "r", encoding="utf-8") as stream:
    for single_line in stream:
        print(single_line)  # Tự động tách dòng và hiển thị

Thẻ: python file-io text-manipulation context-manager

Đăng vào ngày 10 tháng 8 lúc 08:24