Menu

App script quản lý rủi ro cho cá nhân & doanh nghiệp với báo cáo chuẩn định dạng biểu đồ

Tự động hóa sắp xếp và đặt tên file ảnh theo ngày tháng bằng Python

Cung Phúc Thúy 02/04/2026 17:36 498 lượt xem 2 trả lời

Chào mọi người,

Dạo này mình có nhu cầu xử lý một lượng lớn ảnh chụp từ điện thoại, và nhận ra việc sắp xếp, đặt tên theo ngày tháng chụp là rất mất thời gian. Mình tìm hiểu và phát hiện ra Python có thể giải quyết ngon lành vụ này. Hôm nay chia sẻ lại cho anh em nào đang gặp tình huống tương tự.

Vấn đề: Ảnh chụp không theo thứ tự, tên file mặc định khó quản lý, cần sắp xếp vào thư mục theo ngày và đặt tên lại cho dễ nhìn.

Giải pháp: Sử dụng Python để đọc thông tin ngày tháng từ metadata (EXIF) của ảnh, sau đó di chuyển và đổi tên file.

Yêu cầu:

  • Cài đặt Python.
  • Cài đặt thư viện Pillow: pip install Pillow

Code tham khảo:

from PIL import Image
import os
import shutil

SOURCE_DIR = 'path/to/your/photos'
DEST_DIR = 'path/to/organized/photos'

def organize_photos(source_folder, destination_folder):
    if not os.path.exists(destination_folder):
        os.makedirs(destination_folder)

    for filename in os.listdir(source_folder):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
            filepath = os.path.join(source_folder, filename)
            try:
                with Image.open(filepath) as img:
                    exif_data = img._getexif()
                    if exif_data:
                        # EXIF tag for DateTimeOriginal is 36867
                        date_taken_str = exif_data.get(36867)
                        if date_taken_str:
                            # Format: 'YYYY:MM:DD HH:MM:SS'
                            date_obj = datetime.strptime(date_taken_str, '%Y:%m:%d %H:%M:%S')
                            year = date_obj.strftime('%Y')
                            month = date_obj.strftime('%m')
                            day = date_obj.strftime('%d')
                            
                            # Create destination folder structure YYYY/MM/DD
                            target_dir = os.path.join(destination_folder, year, month, day)
                            if not os.path.exists(target_dir):
                                os.makedirs(target_dir)
                            
                            # New filename: YYYYMMDD_HHMMSS_original_name.ext
                            time_part = date_obj.strftime('%H%M%S')
                            base_name, ext = os.path.splitext(filename)
                            new_filename = f'{year}{month}{day}_{time_part}_{base_name}{ext}'
                            
                            shutil.move(filepath, os.path.join(target_dir, new_filename))
                            print(f'Moved: {filename} -> {os.path.join(target_dir, new_filename)}')
                        else:
                            print(f'Skipped: No date taken info for {filename}')
                    else:
                        print(f'Skipped: No EXIF data for {filename}')
            except Exception as e:
                print(f'Error processing {filename}: {e}')

# Replace with your actual paths
organize_photos(SOURCE_DIR, DEST_DIR)

Lưu ý:

  • Bạn cần thay 'path/to/your/photos''path/to/organized/photos' bằng đường dẫn thực tế trên máy của bạn.
  • Code này chỉ lấy ngày giờ chụp từ metadata. Một số ảnh cũ hoặc ảnh scan có thể không có thông tin này.
  • Nên sao lưu ảnh gốc trước khi chạy script để tránh mất dữ liệu không mong muốn.

Hy vọng mẹo nhỏ này giúp ích cho anh em nào đang cần quản lý kho ảnh của mình hiệu quả hơn. Có gì thắc mắc cứ hỏi nhé!

5

Hay quá bạn ơi! Mình cũng đang vật lộn với đống ảnh cũ, toàn tên file lộn xộn, tìm mệt nghỉ. Bạn có thể chia sẻ thêm đoạn code Python bạn dùng để đọc EXIF và sắp xếp không? Đặc biệt là phần tạo thư mục theo định dạng ngày tháng ấy, mình hơi bí chỗ đó.

4

Tuyệt vời! Ý tưởng dùng Python để xử lý ảnh này hay quá, đúng là "cứu cánh" cho ai làm việc với nhiều file. Mình cũng từng loay hoay với việc đặt tên và sắp xếp ảnh thủ công, tốn không ít thời gian.

Mình tò mò không biết bạn xử lý trường hợp metadata EXIF bị thiếu hoặc sai lệch như thế nào? Có khi nào ảnh chụp từ app khác hoặc chỉnh sửa làm mất thông tin ngày tháng không nhỉ? Chia sẻ thêm kinh nghiệm ở mảng này thì hay nữa!

0

Bạn cần đăng nhập để trả lời chủ đề này.

Đăng nhập Đăng ký