Posted in

Các thao tác xử lý file phổ biến trong Python mà bạn nên biết

Khi học Python, hầu hết chúng ta đều bắt đầu với việc đọc (read()) và ghi (write()) file. Đây là những thao tác cơ bản nhất, đủ để xử lý các tác vụ đơn giản như đọc nội dung một file văn bản hay ghi dữ liệu ra một file log.

Tuy nhiên, trong thực tế công việc, việc xử lý file thường phức tạp hơn nhiều. Chẳng hạn, bạn có thể cần:

  • Di chuyển con trỏ để đọc một đoạn dữ liệu cụ thể trong file nhị phân.
  • Kiểm tra metadata như tên file, chế độ mở, hoặc encoding.
  • Làm việc với hệ thống file để đổi tên, xóa, hay kiểm tra sự tồn tại.
  • Xử lý định dạng dữ liệu phức tạp như CSV, JSON, hoặc Excel.
  • Quản lý ngoại lệ khi file không tồn tại hoặc không có quyền truy cập.

Trong bài viết này, mình sẽ hệ thống lại toàn bộ những thao tác phổ biến đó, đi sâu giải thích cách dùng, kèm theo ví dụ minh họa để bạn có thể áp dụng trực tiếp.

1. Di chuyển con trỏ trong file

Khi làm việc với file, Python duy trì một con trỏ nội bộ (file pointer) để xác định vị trí hiện tại trong file – giống như cây bút đang đứng ở đâu trên một trang giấy. Việc di chuyển con trỏ cho phép bạn đọc/ghi ở bất kỳ chỗ nào, không nhất thiết phải tuần tự từ đầu đến cuối.

seek(offset, whence)

  • offset: số byte cần dịch chuyển.
  • whence: gốc tính toán. Có 3 giá trị:
    • 0: tính từ đầu file.
    • 1: tính từ vị trí hiện tại.
    • 2: tính từ cuối file.

Ví dụ:

# Example: Move file pointer
with open("sample.txt", "rb") as file:
    file.seek(10, 0)  # Move pointer 10 bytes from the beginning
    data = file.read(5)  # Read next 5 bytes
    print(data)

tell()

Hàm này trả về vị trí hiện tại của con trỏ (tính bằng byte).

# Example: Check current pointer position
with open("sample.txt", "rb") as file:
    print(file.tell())  # Usually 0 at the beginning
    file.read(20)
    print(file.tell())  # After reading 20 bytes

Sử dụng seek()tell() rất hữu ích khi xử lý file nhị phân (binary file), ví dụ đọc header của ảnh hoặc file PDF.

2. Đóng và làm mới file

Việc quản lý tài nguyên file là cực kỳ quan trọng. Nếu mở file mà không đóng, chương trình có thể gây rò rỉ bộ nhớ hoặc khóa file khiến ứng dụng khác không sử dụng được.

close()

Dùng để đóng file sau khi thao tác xong. Khi sử dụng with open(...), Python sẽ tự động gọi close().

# Example: Close file manually
file = open("sample.txt", "w")
file.write("Hello")
file.close()

flush()

Khi ghi dữ liệu, Python thường lưu tạm trong buffer rồi mới ghi ra ổ cứng. flush() buộc dữ liệu ghi ngay lập tức.

# Example: Flush buffer immediately
with open("log.txt", "w") as log:
    log.write("Log started\n")
    log.flush()  # Ensure data is written immediately

Trong các ứng dụng ghi log hoặc giao dịch tài chính, việc dùng flush() giúp tránh mất dữ liệu khi chương trình bị dừng đột ngột.

3. Quản lý tên file và metadata

Python cho phép lấy thông tin metadata của file thông qua các thuộc tính của đối tượng file.

name

Trả về tên file đang được mở.

with open("example.txt", "r") as f:
    print(f.name)  # Output: example.txt

mode

Trả về chế độ mở file (r, w, a, rb, wb…).

with open("example.txt", "rb") as f:
    print(f.mode)  # Output: rb

encoding

Cho biết encoding của file text.

with open("utf8_file.txt", "r", encoding="utf-8") as f:
    print(f.encoding)  # Output: UTF-8

Các thông tin này hữu ích khi debug hoặc khi làm việc với nhiều loại file encoding khác nhau.

4. Làm việc với hệ thống file

Ngoài thao tác trực tiếp với nội dung file, chúng ta thường phải làm việc với hệ thống file: kiểm tra tồn tại, xóa, đổi tên, lấy metadata của file… Python hỗ trợ điều này qua các module os, os.path, và pathlib.

4.1 Kiểm tra sự tồn tại

import os
from pathlib import Path

print(os.path.exists("data.txt"))  # True/False
print(Path("data.txt").exists())   # True/False

4.2 Kiểm tra loại

print(os.path.isfile("data.txt"))  # True if it's a file
print(os.path.isdir("my_folder"))  # True if it's a directory

4.3 Xóa file

os.remove("old_file.txt")

4.4 Đổi tên file

os.rename("old.txt", "new.txt")

4.5 Lấy kích thước file

size = os.path.getsize("data.txt")
print(f"File size: {size} bytes")

4.6 Lấy ngày sửa đổi cuối cùng

import time

timestamp = os.path.getmtime("data.txt")
print("Last modified:", time.ctime(timestamp))

Với Python 3.4+, mình khuyến khích dùng pathlib vì cú pháp gọn gàng, hướng đối tượng hơn.

5. Các thao tác đặc biệt với file

5.1 Đọc/Ghi nhiều dòng một lúc

  • readlines(): trả về list các dòng.
  • writelines(): ghi list các dòng vào file.
# Example: Read multiple lines
with open("data.txt", "r") as f:
    lines = f.readlines()
    for line in lines:
        print(line.strip())

# Example: Write multiple lines
with open("output.txt", "w") as f:
    f.writelines(["Line 1\n", "Line 2\n"])

5.2 File nhị phân

with open("image.jpg", "rb") as img:
    data = img.read(20)  # Read first 20 bytes
    print(data)

5.3 CSV

import csv

with open("data.csv", "r") as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

5.4 JSON

import json

# Write JSON
with open("data.json", "w") as f:
    json.dump({"name": "Alice", "age": 25}, f)

# Read JSON
with open("data.json", "r") as f:
    data = json.load(f)
    print(data["name"])

5.5 Excel

import pandas as pd

df = pd.read_excel("report.xlsx")
print(df.head())

Việc hỗ trợ nhiều định dạng giúp Python linh hoạt trong xử lý dữ liệu thực tế.

6. Xử lý ngoại lệ liên quan đến file

Trong thực tế, việc thao tác file luôn tiềm ẩn rủi ro: file có thể không tồn tại, bị khóa, hoặc người dùng không có quyền truy cập. Do đó, try-except là bắt buộc để viết code an toàn.

Một số ngoại lệ thường gặp

  • FileNotFoundError: File không tồn tại.
  • PermissionError: Không có quyền truy cập.
  • IsADirectoryError: Mở nhầm thư mục thay vì file.

Ví dụ:

try:
    with open("non_exist.txt", "r") as f:
        content = f.read()
except FileNotFoundError:
    print("File does not exist!")
except PermissionError:
    print("Permission denied!")
except IsADirectoryError:
    print("Path is a directory, not a file!")

Việc xử lý ngoại lệ không chỉ giúp chương trình không bị crash, mà còn mang lại trải nghiệm tốt hơn cho người dùng.

Xử lý file trong Python không chỉ dừng lại ở việc đọc và ghi dữ liệu. Khi hiểu và sử dụng thành thạo các thao tác nâng cao như di chuyển con trỏ, quản lý metadata, làm việc với hệ thống file, hay xử lý các định dạng đặc biệt (CSV, JSON, Excel…), mình có thể chủ động giải quyết nhiều tình huống phức tạp hơn trong lập trình thực tế.

Quan trọng hơn, việc kết hợp các thao tác này với cơ chế quản lý ngoại lệ giúp chương trình trở nên an toàn, ổn định và chuyên nghiệp. Đây chính là nền tảng để xây dựng những ứng dụng tin cậy, dù là dự án cá nhân nhỏ hay hệ thống phần mềm quy mô lớn.

Nếu bạn mới bắt đầu, hãy thử áp dụng từng thao tác nhỏ vào các project hằng ngày, dần dần bạn sẽ thấy việc xử lý file trở nên tự nhiên và linh hoạt hơn. Còn nếu bạn đã quen thuộc, hãy coi đây là cơ hội để tối ưu cách viết code, giúp sản phẩm của mình bền vững và đáng tin cậy hơn.

7. Tài liệu tham khảo

[1] Python Software Foundation, “Built-in Functions — Python Documentation,” Python.org. [Online]. Available: https://docs.python.org/3/library/functions.html. [Accessed: Oct. 1, 2025].
[2] Python Software Foundation, “os — Miscellaneous operating system interfaces,” Python.org. [Online]. Available: https://docs.python.org/3/library/os.html. [Accessed: Oct. 1, 2025].
[3] Python Software Foundation, “pathlib — Object-oriented filesystem paths,” Python.org. [Online]. Available: https://docs.python.org/3/library/pathlib.html. [Accessed: Oct. 1, 2025].
[4] Python Software Foundation, “csv — CSV File Reading and Writing,” Python.org. [Online]. Available: https://docs.python.org/3/library/csv.html. [Accessed: Oct. 1, 2025].
[5] Python Software Foundation, “json — JSON encoder and decoder,” Python.org. [Online]. Available: https://docs.python.org/3/library/json.html. [Accessed: Oct. 1, 2025].

Leave a Reply

Your email address will not be published. Required fields are marked *