数据打标前的处理,删数字和没用的特殊符号

import os
import re

def clean_filename(filename):
    # 保留括号内的数字
    filename = re.sub(r'(?<!\()\d+(?!\))', '', filename)
    # 将特殊符号(包括下划线)转换为空格,但保留括号、逗号和句点
    filename = re.sub(r'[^\w\s\(\),\.]|_', ' ', filename)
    # 去除文件名开头和结尾的空格
    filename = filename.strip()
    return filename

def is_image_file(filename):
    return filename.lower().endswith(('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff'))

def unique_file_name(directory, filename):
    base, extension = os.path.splitext(filename)
    counter = 1
    new_filename = filename
    while os.path.exists(os.path.join(directory, new_filename)):
        new_filename = f"{base} ({counter}){extension}"
        counter += 1
    return new_filename

def rename_files_in_directory(directory):
    for root, dirs, files in os.walk(directory):
        for file in files:
            if is_image_file(file):
                new_name = clean_filename(file)
                new_name = unique_file_name(root, new_name)
                old_file_path = os.path.join(root, file)
                new_file_path = os.path.join(root, new_name)
                os.rename(old_file_path, new_file_path)
                print(f'已重命名: {file} -> {new_name}')

def main():
    directory = input("请输入要处理的文件夹路径: ")
    if not os.path.exists(directory):
        print("路径不存在,请输入有效的文件夹路径。")
        return
    rename_files_in_directory(directory)
    print("处理完成。")

if __name__ == "__main__":
    main()

 

posted @ 2023-11-25 22:11  不上火星不改名  阅读(43)  评论(0)    收藏  举报