这个函数是用于对指定文件夹内的文件名进行修改并输出到新的文件夹,程序通过输入参数,批量减去原文件名的前后固定字符数,并复制/移动到指定文件夹。
我写这个函数的原因是,我将一个文件夹提交给一个程序批量处理,但是处理后的文件中,每一个文件名前面都添加了一个编号,于是我就编写了这个函数用于还原文件名。
import os
import shutil
def modify_files(source_directory, target_directory, prefix=0, suffix=0, mode=False):
"""
修改文件名并移动或复制文件。
参数:
source_directory: str, 源文件夹路径
target_directory: str, 目标文件夹路径
prefix: int, 需要删除的文件名前缀字符数量,默认为0
suffix: int, 需要删除的除去文件扩展名的后缀字符数量,默认为0
mode: bool, 模式选择,True 表示移动,False 表示复制,默认为复制
返回: 无返回值
"""
# 确保目标文件夹存在
os.makedirs(target_directory, exist_ok=True)
# 遍历源文件夹中的所有文件
for filename in os.listdir(source_directory):
# 获取文件扩展名
extension = os.path.splitext(filename)[1]
# 获取文件名主体部分
base_name = os.path.splitext(filename)[0]
# 检查文件名长度
if len(base_name) < prefix + suffix:
print(f"文件名 {filename} 长度不足,已保留原文件名。")
new_filename = filename
else:
# 删除前缀和后缀
new_filename = base_name[prefix:][:len(base_name[prefix:]) - suffix] + extension
# 创建源文件和目标文件的完整路径
old_file = os.path.join(source_directory, filename)
new_file = os.path.join(target_directory, new_filename)
# 根据模式选择移动或复制文件
if mode:
shutil.move(old_file, new_file)
else:
shutil.copy2(old_file, new_file)
# 使用例子
source_directory = '/path/to/source/directory'
target_directory = '/path/to/target/directory'
modify_files(source_directory, target_directory)