Python脚本对MacOS文件夹下的文件进行重命名及特殊字符替换

Python脚本:批量重命名文件

这个Python脚本旨在帮助用户批量重命名指定目录中的文件。其功能包括:

  1. 目录指定: 用户可以通过命令行指定需要重命名文件的目录。
  2. 文件类型筛选: 脚本会列出目录中所有文件类型,让用户选择特定类型的文件进行重命名。
  3. 时间戳添加: 自动在文件名前添加文件的创建时间(格式为 YYYYMMDDHHMM)作为前缀。
  4. 毫秒数选项: 用户可以选择是否在时间戳中包含毫秒数(格式为 YYYYMMDDHHMM_SSS)。
  5. 特殊字符处理: 自动将文件名中的特殊字符和空格替换为下划线,并删除括号。
代码实现
import os
import sys
import time

def replace_special_chars(file_name):
    file_name = file_name.replace('(', '').replace(')', '')
    special_chars = [' ', ':', '/', '\\', '|', '?', '*', '<', '>', '\"']
    for char in special_chars:
        file_name = file_name.replace(char, '_')
    return file_name

def get_creation_time(path, include_millisec):
    birth_time = os.stat(path).st_birthtime
    time_format = "%Y%m%d%H%M"
    if include_millisec:
        millisec = int((birth_time - int(birth_time)) * 1000)
        time_format += f"_{millisec:03d}"
    return time.strftime(time_format, time.localtime(birth_time))

def get_file_extensions(directory):
    extensions = set()
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.startswith('.'):
                continue
            ext = os.path.splitext(file)[1].lower()
            if ext:
                extensions.add(ext[1:])
    return sorted(extensions)

def count_files(directory, extensions_to_rename):
    return sum([len([f for f in files if os.path.splitext(f)[1][1:].lower() in extensions_to_rename]) for r, d, files in os.walk(directory)])

def rename_files_in_directory(directory, extensions_to_rename, include_millisec):
    total_files = count_files(directory, extensions_to_rename)
    processed = 0

    for root, dirs, files in os.walk(directory):
        for file in files:
            ext = os.path.splitext(file)[1][1:].lower()
            if ext not in extensions_to_rename or file.startswith('.'):
                continue

            processed += 1
            new_name = replace_special_chars(file)
            creation_time = get_creation_time(os.path.join(root, file), include_millisec)
            new_name_with_time = f"{creation_time}_{new_name}"

            try:
                if new_name_with_time != file:
                    os.rename(os.path.join(root, file), os.path.join(root, new_name_with_time))
                    print(f"[{processed}/{total_files}] Renamed: {file} -> {new_name_with_time}")
                else:
                    print(f"[{processed}/{total_files}] No change: {file}")
            except FileNotFoundError:
                print(f"Error: File not found or unable to rename - {file}")

if len(sys.argv) > 1:
    directory = sys.argv[1]
    available_extensions = get_file_extensions(directory)
    print("Available file types:")
    for i, ext in enumerate(available_extensions, 1):
        print(f"{i}. {ext}")

    selection = input("Enter the numbers of file types to rename (e.g., 1,2,4): ")
    selected_indices = [int(i) for i in selection.split(',') if i.isdigit()]
    extensions_to_rename = {available_extensions[i-1] for i in selected_indices if i-1 < len(available_extensions)}

    include_millisec_answer = input("Include milliseconds in the timestamp? (y/n): ").lower()
    include_millisec = include_millisec_answer == 'y'

    rename_files_in_directory(directory, extensions_to_rename, include_millisec)
else:
    print("Error: No directory provided. Please specify a directory.")
使用方法
  1. 将脚本保存为 rename_files.py
  2. 在命令行中运行脚本,并指定需要处理的目录:
    python rename_files.py /path/to/directory
    
  3. 根据提示选择要重命名的文件类型和是否包含毫秒数。

这个脚本会处理文件名中的特殊字符和空格,将它们替换为下划线,并删除括号。如果有任何问题,请确保目录路径和权限正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值