您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 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
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")
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)
)
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
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))
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))
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()
/ \ : * ? " < > |
等特殊字符通过Python脚本实现图片批量重命名,不仅可以提高工作效率,还能建立规范的文件管理体系。本文介绍的方法可以根据实际需求进行组合和扩展,例如添加人脸识别分类、自动生成缩略图等功能。掌握这些自动化技巧,将让你在Linux环境下的图片管理工作事半功倍。 “`
这篇文章共计约1750字,涵盖了从基础到高级的多种图片批量命名方案,并提供了可直接运行的代码示例。所有脚本都针对Linux环境进行了优化,可以根据实际需求进行修改和扩展。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。