Nếu thường xuyên sao lưu dữ liệu, tải ảnh từ nhiều nguồn hoặc sao chép thư mục nhiều lần, bạn rất dễ gặp tình trạng ảnh bị trùng lặp. Dù tên file có thể khác nhau, nội dung bên trong vẫn hoàn toàn giống hệt, khiến thư mục trở nên lộn xộn và tốn không gian lưu trữ.
Trong bài viết này, mình sẽ hướng dẫn cách xóa ảnh trùng lặp bằng Python bằng một đoạn mã đơn giản. Chương trình sẽ quét toàn bộ thư mục, phát hiện các ảnh có nội dung giống nhau và tự động xóa bản sao. Mã nguồn chỉ sử dụng các thư viện có sẵn của Python nên bạn có thể chạy ngay mà không cần cài đặt thêm package.
Python xóa ảnh trùng lặp hoạt động như thế nào?
Chương trình không so sánh tên file mà đọc trực tiếp nội dung của từng ảnh để xác định chúng có phải là bản sao hay không. Sau khi quét toàn bộ thư mục, chương trình sẽ tạo một mã hash (SHA-256) cho từng file. Mỗi mã hash hoạt động như một dấu vân tay số đại diện cho nội dung của ảnh.
Nếu hai ảnh tạo ra cùng một mã hash, chương trình sẽ kết luận chúng có nội dung giống hệt nhau và đánh dấu một trong hai là ảnh trùng lặp. Phương pháp này vẫn hoạt động chính xác ngay cả khi:
- Tên file khác nhau.
- Được lưu ở các thư mục khác nhau.
- Thời gian tạo hoặc chỉnh sửa không giống nhau.
Ví dụ, bạn có hai file sau:
Mặc dù tên file khác nhau, nhưng nếu nội dung bên trong hoàn toàn giống nhau thì hai file sẽ tạo ra cùng một mã hash. Khi đó, chương trình sẽ giữ lại một bản và đánh dấu bản còn lại là ảnh trùng lặp.
Phương pháp so sánh bằng mã hash giúp phát hiện chính xác các bản sao của một ảnh mà không bị ảnh hưởng bởi tên file hoặc vị trí lưu trữ. Tuy nhiên, chương trình chỉ nhận diện các file có dữ liệu giống hệt nhau, nếu một ảnh đã được chỉnh sửa, thay đổi kích thước hoặc nén lại thì mã hash sẽ khác và sẽ không được xem là ảnh trùng lặp.
Code Python xóa ảnh trùng lặp

Đoạn mã dưới đây sẽ quét toàn bộ thư mục, tạo mã hash cho từng ảnh và phát hiện các file có nội dung giống hệt nhau. Mặc định, chương trình chạy ở chế độ Preview nên chỉ hiển thị danh sách ảnh trùng lặp để bạn kiểm tra, chưa thực hiện xóa bất kỳ file nào.
Sau khi xác nhận kết quả chính xác, bạn chỉ cần chuyển preview = False để bắt đầu xóa các bản sao. Cách làm này giúp hạn chế rủi ro xóa nhầm dữ liệu và phù hợp ngay cả với những người mới sử dụng Python.
Cách làm này giúp hạn chế rủi ro xóa nhầm dữ liệu và phù hợp hơn với những người mới sử dụng Python.
Đoạn mã Python hoàn chỉnh sẽ được đặt tại đây.
import hashlib
from pathlib import Path
preview = True
image_extensions = (
“.jpg”,
“.jpeg”,
“.png”,
“.webp”
)
…
Để chạy chương trình, bạn chỉ cần thay đổi một vài thiết lập dưới đây cho phù hợp với thư mục và nhu cầu sử dụng.
Các Thiết Lập Cần Chỉnh Trước Khi Chạy

Đối với hầu hết trường hợp, bạn chỉ cần thay đổi 3 thiết lập dưới đây là có thể chạy chương trình.
📂 Chọn thư mục cần quét
Đổi đường dẫn bên dưới thành thư mục chứa ảnh của bạn.
folder = r"D:\Pictures"
Chương trình sẽ quét toàn bộ ảnh trong thư mục này và các thư mục con (nếu có).
👀 Bật hoặc tắt chế độ Preview
Chế độ Preview giúp bạn kiểm tra danh sách ảnh trùng trước khi thực hiện xóa.
preview = True
- True: Chỉ hiển thị danh sách ảnh trùng để kiểm tra, không xóa file.
- False: Tự động xóa các ảnh trùng lặp.
Nếu đây là lần đầu sử dụng, bạn nên giữ preview = True để kiểm tra kết quả trước khi chuyển sang chế độ xóa.
🖼️ Thay đổi định dạng ảnh cần quét
Bạn có thể thêm hoặc bớt các định dạng ảnh mà chương trình sẽ xử lý.
image_extensions = (
".jpg",
".jpeg",
".png",
".webp"
)
Ví dụ, nếu muốn quét thêm ảnh ".bmp" hoặc ".gif", chỉ cần bổ sung phần mở rộng tương ứng vào danh sách trên.
Kết quả sau khi chạy
Sau khi hoàn tất quá trình quét, chương trình sẽ hiển thị danh sách các ảnh trùng lặp cùng với thông tin thống kê như số lượng ảnh đã quét, số ảnh trùng và dung lượng có thể giải phóng. Nếu đang chạy ở chế độ Preview, chương trình chỉ liệt kê các bản sao để bạn kiểm tra mà không xóa bất kỳ file nào.
Dưới đây là ví dụ kết quả khi chương trình chạy ở chế độ Preview:
| Terminal |
| Đang quét:
D:\Pictures [TRÙNG]Giữ lại: Trùng: ================================ Hoàn thành! Tổng ảnh đã quét: 520 Ảnh trùng: 2 Dung lượng có thể giải phóng: 8.6 MB Chế độ: Preview |
Sau khi kiểm tra danh sách trên, bạn chỉ cần chuyển preview = False và chạy lại chương trình để bắt đầu xóa các bản sao.
Các Lỗi Thường Gặp
Nếu chương trình không hoạt động như mong muốn, hãy kiểm tra một số lỗi phổ biến dưới đây. Phần lớn các lỗi đều liên quan đến đường dẫn thư mục, quyền truy cập hoặc dữ liệu ảnh.
| Lỗi | Nguyên nhân và cách khắc phục |
|---|---|
| Không tìm thấy thư mục | Kiểm tra lại giá trị của biến folder và đảm bảo đường dẫn thư mục tồn tại. |
| Permission denied | Một hoặc nhiều ảnh đang được mở bởi ứng dụng khác hoặc bạn không có quyền truy cập. Hãy đóng các ứng dụng đang sử dụng file rồi chạy lại chương trình. |
| Không phát hiện ảnh trùng | Chương trình chỉ nhận diện các file có nội dung giống hệt nhau. Nếu ảnh đã được chỉnh sửa, cắt, nén hoặc thay đổi kích thước thì sẽ không được xem là ảnh trùng lặp. |
| FileNotFoundError | File đã bị di chuyển hoặc xóa trong khi chương trình đang quét. Hãy chạy lại chương trình sau khi đảm bảo thư mục không còn thay đổi. |
Kết luận
Việc tìm và xóa ảnh trùng lặp bằng Python giúp bạn tiết kiệm đáng kể thời gian so với thao tác thủ công, đặc biệt khi cần xử lý hàng trăm hoặc hàng nghìn file. Với phương pháp so sánh nội dung bằng mã hash (SHA-256), chương trình có thể phát hiện chính xác các bản sao ngay cả khi tên file hoặc vị trí lưu trữ khác nhau.
Để đảm bảo an toàn, bạn nên chạy chương trình ở chế độ Preview trước để kiểm tra danh sách ảnh trùng lặp. Sau khi xác nhận kết quả, chỉ cần chuyển preview = False và chạy lại chương trình để bắt đầu xóa các bản sao không cần thiết.
Nếu muốn mở rộng thêm tính năng, bạn có thể phát triển chương trình theo nhiều hướng như xuất báo cáo CSV, di chuyển ảnh vào Recycle Bin thay vì xóa vĩnh viễn hoặc nhận diện các ảnh tương đồng bằng Perceptual Hash (pHash). Những cải tiến này sẽ giúp chương trình linh hoạt hơn khi áp dụng vào các thư viện ảnh lớn.
Xem thêm các bài viết khác:
Hướng dẫn Python đổi Tên Hàng Loạt Ảnh (Kèm Mã Nguồn)
Hướng dẫn Python đổi Tên Hàng Loạt Ảnh (Kèm Mã Nguồn)
Chia Sẻ Mã Python Chuyển Hàng Loạt JPG Sang WebP Bằng Python
5 Phần Mềm Chỉnh Sửa Ảnh Miễn Phí Tốt Nhất Cho Windows (2026)