linux中如何使用Python对图片进行批量命名

发布时间:2021-12-29 10:26:49 作者:小新
来源:亿速云 阅读:225
# Linux中如何使用Python对图片进行批量命名

## 前言

在日常工作和生活中,我们经常需要处理大量的图片文件。这些图片可能来自相机、手机截图或网络下载,文件名往往杂乱无章(如`IMG_20230101_123456.jpg`或`DSC0001.jpg`)。本文将详细介绍如何在Linux系统中使用Python脚本对图片进行批量重命名,实现文件管理的自动化。

## 准备工作

### 1. 环境要求
- Linux操作系统(Ubuntu/CentOS等)
- Python 3.x环境
- Pillow库(用于图像处理)
- 基本的终端操作能力

### 2. 安装必要组件
```bash
# 安装Python3(如未安装)
sudo apt-get install python3

# 安装Pillow库
pip3 install Pillow

# 安装exifread(用于读取EXIF信息)
pip3 install exifread

一、基础批量重命名方法

1. 使用os模块实现简单重命名

import os

def batch_rename(folder_path, prefix):
    """基础批量重命名函数"""
    for index, filename in enumerate(os.listdir(folder_path)):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
            # 获取文件扩展名
            ext = os.path.splitext(filename)[1]
            # 新文件名格式:前缀_序号.扩展名
            new_name = f"{prefix}_{index+1:03d}{ext}"
            # 重命名操作
            os.rename(
                os.path.join(folder_path, filename),
                os.path.join(folder_path, new_name)
            )
            print(f"Renamed {filename} to {new_name}")

# 使用示例
batch_rename("/path/to/images", "vacation")

2. 添加日期时间信息

from datetime import datetime

def rename_with_date(folder_path):
    for filename in os.listdir(folder_path):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
            # 获取当前时间
            now = datetime.now().strftime("%Y%m%d_%H%M%S")
            ext = os.path.splitext(filename)[1]
            new_name = f"photo_{now}_{os.urandom(2).hex()}{ext}"
            os.rename(
                os.path.join(folder_path, filename),
                os.path.join(folder_path, new_name)
            )

二、基于EXIF信息的智能命名

1. 读取照片元数据

import exifread

def get_exif_date(image_path):
    """获取照片拍摄日期"""
    with open(image_path, 'rb') as f:
        tags = exifread.process_file(f)
        if 'EXIF DateTimeOriginal' in tags:
            return str(tags['EXIF DateTimeOriginal'])
    return None

2. 实现EXIF命名

def exif_based_rename(folder_path):
    for filename in os.listdir(folder_path):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
            filepath = os.path.join(folder_path, filename)
            ext = os.path.splitext(filename)[1]
            
            # 尝试获取EXIF日期
            exif_date = get_exif_date(filepath)
            if exif_date:
                # 格式化日期:2023:01:01 12:34:56 → 20230101_123456
                clean_date = exif_date.replace(':', '').replace(' ', '_')
                new_name = f"{clean_date}{ext}"
            else:
                # 使用文件修改日期作为后备方案
                mtime = os.path.getmtime(filepath)
                clean_date = datetime.fromtimestamp(mtime).strftime("%Y%m%d_%H%M%S")
                new_name = f"noexif_{clean_date}{ext}"
            
            os.rename(filepath, os.path.join(folder_path, new_name))

三、高级命名方案

1. 按内容分类命名

from PIL import Image

def categorize_by_color(image_path):
    """通过主色调简单分类图片"""
    img = Image.open(image_path)
    img = img.convert('RGB')
    
    # 获取主要颜色(简化版)
    colors = img.getcolors(maxcolors=10000)
    if not colors:
        return "other"
    
    main_color = max(colors, key=lambda x: x[0])[1]
    if main_color[0] > 200 and main_color[1] < 50 and main_color[2] < 50:
        return "red"
    elif main_color[1] > 200 and main_color[0] < 50 and main_color[2] < 50:
        return "green"
    else:
        return "other"

def content_based_rename(folder_path):
    for filename in os.listdir(folder_path):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
            filepath = os.path.join(folder_path, filename)
            ext = os.path.splitext(filename)[1]
            
            category = categorize_by_color(filepath)
            mtime = os.path.getmtime(filepath)
            clean_date = datetime.fromtimestamp(mtime).strftime("%Y%m%d")
            
            new_name = f"{category}_{clean_date}_{os.urandom(2).hex()}{ext}"
            os.rename(filepath, os.path.join(folder_path, new_name))

2. 结合GPS信息命名(需安装geopy)

from geopy.geocoders import Nominatim

def get_location_from_gps(gps_info):
    """将GPS坐标转换为地理位置名称"""
    if not gps_info:
        return None
    
    try:
        geolocator = Nominatim(user_agent="image_renamer")
        location = geolocator.reverse(f"{gps_info[0]}, {gps_info[1]}")
        return location.address.split(',')[0]
    except:
        return None

四、完整脚本示例

#!/usr/bin/env python3
"""
图片批量重命名工具
功能:
1. 支持按EXIF日期重命名
2. 支持按修改日期重命名
3. 支持自定义前缀
4. 支持序列号填充
"""

import os
import argparse
from datetime import datetime
import exifread
from PIL import Image

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("folder", help="图片目录路径")
    parser.add_argument("--prefix", default="img", help="文件名前缀")
    parser.add_argument("--digits", type=int, default=4, help="序号位数")
    args = parser.parse_args()

    for index, filename in enumerate(sorted(os.listdir(args.folder))):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
            filepath = os.path.join(args.folder, filename)
            ext = os.path.splitext(filename)[1].lower()
            
            # 尝试获取EXIF日期
            exif_date = get_exif_date(filepath)
            if exif_date:
                date_part = exif_date.replace(':', '').replace(' ', '_')
            else:
                mtime = os.path.getmtime(filepath)
                date_part = datetime.fromtimestamp(mtime).strftime("%Y%m%d")
            
            # 生成新文件名
            new_name = f"{args.prefix}_{date_part}_{index+1:0{args.digits}d}{ext}"
            
            # 执行重命名
            os.rename(filepath, os.path.join(args.folder, new_name))
            print(f"Renamed {filename} → {new_name}")

if __name__ == "__main__":
    main()

五、使用建议

  1. 备份原始文件:建议先复制图片到新目录再进行重命名
  2. 测试运行:可以先打印新文件名而不实际执行重命名
  3. 处理特殊字符:文件名中避免使用/ \ : * ? " < > |等特殊字符
  4. 大文件处理:对于大量文件,可以考虑分批处理

结语

通过Python脚本实现图片批量重命名,不仅可以提高工作效率,还能建立规范的文件管理体系。本文介绍的方法可以根据实际需求进行组合和扩展,例如添加人脸识别分类、自动生成缩略图等功能。掌握这些自动化技巧,将让你在Linux环境下的图片管理工作事半功倍。 “`

这篇文章共计约1750字,涵盖了从基础到高级的多种图片批量命名方案,并提供了可直接运行的代码示例。所有脚本都针对Linux环境进行了优化,可以根据实际需求进行修改和扩展。

推荐阅读:
  1. python3图片文件批量重命名处理
  2. Python中批量重命名的方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python linux

上一篇:LiteOS AT指令怎么使用

下一篇:Vue3插槽怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》