Khi làm việc với hàng chục hoặc hàng trăm hình ảnh, việc đổi tên từng tệp theo cách thủ công sẽ tốn khá nhiều thời gian. Những tên mặc định như IMG_001.jpg, DSC_2458.jpg hay Screenshot.png cũng khiến việc tìm kiếm, quản lý hoặc tải lên website trở nên khó khăn hơn.
Nếu cần chuẩn hóa toàn bộ tên ảnh theo cùng một quy tắc, Python có thể giúp tự động hóa công việc này chỉ với vài dòng mã. Bạn chỉ cần chỉ định thư mục chứa ảnh, đặt tiền tố mong muốn và chương trình sẽ đổi tên toàn bộ tệp mà vẫn giữ nguyên phần mở rộng của ảnh.
Xem thêm bài viết khác: Chia Sẻ Mã Python Chuyển Hàng Loạt JPG Sang WebP Bằng Python
Khi nào nên dùng đoạn mã này?

Đoạn mã phù hợp khi bạn cần đổi tên nhiều ảnh theo cùng một quy tắc mà không muốn thao tác thủ công.
- Đổi tên hàng loạt ảnh sản phẩm.
- Chuẩn hóa tên ảnh trước khi tải lên website.
- Sắp xếp thư viện ảnh theo quy tắc thống nhất.
- Chuẩn bị dữ liệu cho AI hoặc Machine Learning.
- Quản lý hàng trăm tệp trong cùng một thư mục.
Đầu vào và đầu ra

Ví dụ dưới đây minh họa kết quả trước và sau khi chạy chương trình.
Đầu vào
IMG_001.jpg
IMG_002.jpg
IMG_003.jpg
IMG_004.jpg
↓
Đầu ra
san-go-cong-nghiep-1.jpg
san-go-cong-nghiep-2.jpg
san-go-cong-nghiep-3.jpg
san-go-cong-nghiep-4.jpg
Trong ví dụ trên, chương trình chỉ thay đổi tên tệp và vẫn giữ nguyên định dạng .jpg.
Mã nguồn Python
Đoạn mã dưới đây sử dụng thư viện os có sẵn trong Python để duyệt toàn bộ tệp trong thư mục và đổi tên theo tiền tố bạn đặt trước.
import os
folder = r"D:\Images"
prefix = "san-go-cong-nghiep"
index = 1
for file_name in sorted(os.listdir(folder)):
```
old_path = os.path.join(folder, file_name)
# Chỉ đổi tên file
if not os.path.isfile(old_path):
continue
extension = os.path.splitext(file_name)[1]
new_name = f"{prefix}-{index}{extension}"
new_path = os.path.join(folder, new_name)
os.rename(old_path, new_path)
index += 1
```
print("Hoàn thành!")
Đoạn mã trên sẽ:
- Duyệt toàn bộ tệp trong thư mục.
- Tự động bỏ qua thư mục con.
- Giữ nguyên phần mở rộng của từng ảnh.
- Đánh số lần lượt theo thứ tự 1, 2, 3…
- Sắp xếp danh sách tệp bằng sorted() để hạn chế tình trạng đánh số không theo mong muốn.
Kết quả sau khi chạy
Sau khi chương trình hoàn thành, toàn bộ ảnh trong thư mục sẽ được đổi tên theo cùng một quy tắc. Phần mở rộng của tệp vẫn được giữ nguyên nên bạn không cần lo ảnh bị thay đổi định dạng hoặc không mở được.
Trước khi đổi tên
IMG_001.jpg
IMG_002.jpg
DSC_5689.jpg
PHOTO_1024.jpg
↓
Sau khi đổi tên
san-go-cong-nghiep-1.jpg
san-go-cong-nghiep-2.jpg
san-go-cong-nghiep-3.jpg
san-go-cong-nghiep-4.jpg

Với vài chục hay vài trăm ảnh, chương trình vẫn hoạt động theo cùng một nguyên tắc. Thời gian xử lý sẽ phụ thuộc vào số lượng tệp và cấu hình máy tính, nhưng do chỉ thực hiện thao tác đổi tên nên thường hoàn thành khá nhanh.
Những chỗ bạn thường cần chỉnh sửa
Trong hầu hết trường hợp, bạn chỉ cần thay đổi một vài giá trị dưới đây mà không phải sửa toàn bộ chương trình.
Thay đổi thư mục chứa ảnh
Sửa giá trị của biến folder để trỏ đến thư mục bạn muốn đổi tên.
folder = r"D:\Images"
Ví dụ:
folder = r"E:\AnhSanPham"
Đổi tiền tố của tên file
Biến prefix quyết định phần đầu của tên ảnh sau khi đổi.
prefix = "san-go-cong-nghiep"
Bạn có thể thay bằng bất kỳ tên nào phù hợp.
prefix = "san-go-egger"
prefix = "phong-khach"
prefix = "du-an-can-ho"
Thay đổi số bắt đầu
Mặc định chương trình đánh số từ 1. Nếu muốn bắt đầu từ số khác, chỉ cần sửa biến index.
index = 100
Kết quả:
san-go-cong-nghiep-100.jpg
san-go-cong-nghiep-101.jpg
...
Giữ số thứ tự luôn có 3 chữ số
Nếu muốn tên ảnh đồng nhất hơn, bạn có thể thêm số 0 ở phía trước.
Thay dòng:
new_name = f"{prefix}-{index}{extension}"
bằng:
new_name = f"{prefix}-{index:03d}{extension}"
Kết quả:
san-go-cong-nghiep-001.jpg
san-go-cong-nghiep-002.jpg
san-go-cong-nghiep-003.jpg
Một vài cách tùy biến theo nhu cầu
Tùy vào mục đích sử dụng, bạn có thể điều chỉnh chương trình để phù hợp với từng trường hợp cụ thể.
Chỉ đổi tên ảnh JPG và JPEG
Nếu thư mục chứa nhiều loại tệp khác nhau, bạn có thể chỉ xử lý ảnh JPG và JPEG.
if extension.lower() not in (".jpg", ".jpeg"):
continue
Chỉ đổi tên ảnh PNG
if extension.lower() != ".png":
continue
Đổi tên nhưng vẫn giữ phần số cũ
Nếu các ảnh đã được đánh số sẵn và bạn chỉ muốn thay đổi tiền tố, có thể tách phần số trong tên file rồi ghép lại theo quy tắc riêng. Cách này phù hợp khi làm việc với dữ liệu đã được sắp xếp từ trước.
Đổi tên nhiều thư mục liên tiếp
Thay vì chạy chương trình nhiều lần, bạn cũng có thể mở rộng đoạn mã để duyệt qua nhiều thư mục và áp dụng cùng một quy tắc đặt tên. Điều này hữu ích khi quản lý nhiều bộ ảnh sản phẩm hoặc dữ liệu dự án.
Những chỗ bạn thường cần chỉnh sửa
Trong hầu hết trường hợp, bạn chỉ cần thay đổi ba giá trị dưới đây là có thể sử dụng đoạn mã cho thư mục của mình.
Thư mục chứa ảnh
Thay đổi đường dẫn tại biến folder để trỏ đến thư mục cần đổi tên.
folder = r"D:\Images"
Tiền tố của tên file
Biến prefix quyết định phần đầu của tên ảnh sau khi đổi.
prefix = "san-go-cong-nghiep"
Ví dụ:
prefix = "san-go-egger"
Số bắt đầu
Mặc định chương trình đánh số từ 1. Nếu muốn bắt đầu từ số khác, chỉ cần thay đổi biến index.
index = 100
Một vài cách tùy biến
Bạn có thể mở rộng đoạn mã tùy theo nhu cầu mà không cần viết lại từ đầu.
Đánh số theo dạng 001, 002, 003
new_name = f"{prefix}-{index:03d}{extension}"
Chỉ đổi tên ảnh JPG
if extension.lower() not in (".jpg", ".jpeg"):
continue
Giữ thứ tự ổn định
Nếu muốn ảnh luôn được đánh số theo đúng thứ tự tên file, hãy sử dụng sorted() khi duyệt thư mục.
for file_name in sorted(os.listdir(folder)):
Các lỗi thường gặp
- Không tìm thấy thư mục: Kiểm tra lại đường dẫn của biến folder.
- Không đổi được tên file: Đóng các phần mềm đang mở ảnh trước khi chạy chương trình.
- Thứ tự đánh số không đúng: Sử dụng sorted(os.listdir(folder)) để sắp xếp danh sách tệp.
Kết luận
Đây là một đoạn mã Python đơn giản nhưng hữu ích khi cần đổi tên hàng loạt ảnh theo cùng một quy tắc. Chỉ cần thay đổi thư mục, tiền tố hoặc cách đánh số, bạn có thể áp dụng cho nhiều mục đích khác nhau như quản lý ảnh sản phẩm, chuẩn hóa dữ liệu hoặc chuẩn bị hình ảnh trước khi tải lên website.
Một số bài viết tham khảo:
10 Đoạn Mã Python Hữu Ích Mà Lập Trình Viên Nên Lưu Lại
Windows Không Nhận USB Android? 7 Cách Khắc Phục Hiệu Quả
5 Phần Mềm Mã Nguồn Mở Miễn Phí Thay Thế Photoshop, Illustrator, Maya và Camtasia