Hướng dẫn Python đổi Tên Hàng Loạt Ảnh (Kèm Mã Nguồn)

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?

Thư mục chứa nhiều ảnh với tên mặc định trước khi đổi tên bằng Python
Thư mục chứa nhiều ảnh với tên mặc định trước khi đổi tên bằng Python

Đ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.
Lưu ý: Nếu đây là lần đầu chạy chương trình, hãy thử trên một thư mục mẫu hoặc sao lưu dữ liệu trước khi đổi tên hàng loạt. Điều này giúp tránh mất tên file gốc nếu bạn cần khôi phục lại sau này.

Đầu vào và đầu ra

Kết quả đổi tên hàng loạt ảnh bằng Python
Kết quả đổi tên hàng loạt ảnh bằng Python

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
Chạy chương trình đổi tên hàng loạt ảnh bằng Python trong VS Code
Chạy chương trình đổi tên hàng loạt ảnh bằng Python trong VS Code

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

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *