图片名中文翻译成英文

发布时间 2023-12-21 21:55:50作者: 不上火星不改名

1.图片名只保留中文

import os
import re
import unicodedata

def is_chinese(char):
    """判断一个字符是否是中文。"""
    return unicodedata.category(char).startswith('Lo')

def retain_chinese(filename):
    """保留文件名中的中文字符。"""
    return ''.join(char for char in filename if is_chinese(char))

def rename_files_in_directory(directory):
    """重命名指定目录中的所有图片,只保留中文字符,并保持原扩展名。"""
    for filename in os.listdir(directory):
        # 确保文件是图片
        if not filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')):
            continue

        # 提取原始扩展名
        original_extension = os.path.splitext(filename)[-1]

        # 新文件名只包含中文字符,且保持原扩展名
        new_name = retain_chinese(filename) + original_extension

        # 如果文件名未改变,则跳过
        if new_name == filename:
            continue

        # 如果文件名已存在,则添加后缀
        new_path = os.path.join(directory, new_name)
        counter = 1
        while os.path.exists(new_path):
            base = retain_chinese(filename)
            new_path = os.path.join(directory, f"{base}({counter}){original_extension}")
            counter += 1

        # 重命名文件
        os.rename(os.path.join(directory, filename), new_path)
        print(f"Renamed {filename} to {new_path}")

def main():
    directory = input("请输入目录地址: ")
    if os.path.isdir(directory):
        rename_files_in_directory(directory)
    else:
        print("提供的地址不是一个有效的目录。")

if __name__ == "__main__":
    main()

2.建立统计excel

import os
from openpyxl import Workbook

def list_image_filenames(directory):
    # 支持的图片文件扩展名列表
    img_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp']
    
    # 遍历目录,列出所有图片文件名(不含后缀)
    return [os.path.splitext(file)[0] for file in os.listdir(directory)
            if os.path.splitext(file)[1].lower() in img_extensions]

def write_to_excel(filenames, save_path):
    # 创建一个Excel工作簿
    workbook = Workbook()
    sheet = workbook.active
    
    # 在第一行添加标题
    sheet.cell(row=1, column=1).value = "旧数据"
    sheet.cell(row=1, column=2).value = "新数据"
    
    # 从第二行开始,将文件名写入第一列
    for index, name in enumerate(filenames, 2):  # 从第二行开始
        sheet.cell(row=index, column=1).value = name
    
    # 保存Excel文件
    workbook.save(save_path)

def main():
    # 从用户获取目录路径
    dir_path = input("请输入文件夹目录路径: ")
    
    # 检查路径是否存在
    if not os.path.exists(dir_path):
        print("指定的路径不存在,请检查后重试。")
        return
    
    # 获取图片文件名列表
    filenames = list_image_filenames(dir_path)
    
    # 设置Excel文件保存路径
    excel_path = os.path.join(dir_path, "统计文件名.xlsx")
    
    # 写入Excel并保存
    write_to_excel(filenames, excel_path)
    print(f"文件名已成功写入 {excel_path}")

if __name__ == "__main__":
    main()

 

3.chatgpt翻译

4.点对点修改:

import os
import pandas as pd

def unique_filename(path, name, extension):
    """生成唯一的文件名,避免重命名时覆盖现有文件。"""
    counter = 1
    new_name = name
    while os.path.exists(os.path.join(path, new_name + extension)):
        new_name = f"{name}({counter})"
        counter += 1
    return new_name

def main():
    # 请求用户输入文件夹路径和Excel文件名
    folder_path = input("请输入文件夹路径: ")
    excel_file = input("请输入Excel文件名(包括.xlsx扩展名): ")

    # 尝试读取Excel文件
    try:
        df = pd.read_excel(os.path.join(folder_path, excel_file))
        print("列名:", df.columns)
        
        # 确认列名存在
        if '旧名称' not in df.columns or '新名称' not in df.columns:
            print("错误:找不到'旧名称'或'新名称'列。请检查Excel文件的列标题。")
            return
    except Exception as e:
        print(f"读取Excel文件时出错: {e}")
        return

    # 支持的图片格式
    image_extensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp']

    # 遍历目录中的文件
    for file in os.listdir(folder_path):
        file_path = os.path.join(folder_path, file)
        if os.path.isfile(file_path) and any(file.endswith(ext) for ext in image_extensions):
            name, extension = os.path.splitext(file)
            # 在Excel中查找匹配的旧名称
            new_name = df.loc[df['旧名称'] == name, '新名称'].values
            if new_name.size > 0:
                new_name = unique_filename(folder_path, new_name[0], extension)
                new_file_path = os.path.join(folder_path, new_name + extension)
                os.rename(file_path, new_file_path)
                print(f"重命名:'{file}' -> '{new_name + extension}'")

    print("重命名过程完成。")

if __name__ == "__main__":
    main()