简介
利用python os模块编写脚本批量处理文件重命名,两种方法任君选择。通过指定文件后缀也可以批量删除文件。
编程环境
- Python 3.8版本
- Python的标准库os
- 使用pyCharm作为代码编辑器
实现思路
- 获取指定目录下的所有文件,可以通过walk方法将目录下所有文件夹和文件获取到
- 再使用os.path.join方法进行路径拼接出旧文件路径
- 设置一个用于查找的关键字关键词和一个用于修改的关键词,并判断查找词是否在旧文件路径中
- 如果在则设置新文件路径并使用replace(oldkey, newkey) 替换原来文件名实现重命名
- 最后用os.rename(old_file_path, new_file_path) 完成方法一的重命名操作
- 看不懂,直接源码分析吧😂
代码示例
import os
"""批量修改文件重命名和删除目录下指定后缀文件"""
def files_remove(file_path):
"""批量删除文件"""
print('此工具通过输入文件后缀进行批量删除文件')
remove_suffix = input('输入要删除文件的后缀: (.jpg .png ...) >>>')
sub_files = list()
# 获取该目录下所有的子目录, 列表中存储文件的绝对路径
if os.path.isdir(file_path):
sub_files = [os.path.join(file_path, i) for i in os.listdir(file_path)]
# 遍历该目录, 判断是否有目标尾缀的文件,有进行删除
if sub_files:
for sub_file in sub_files:
if os.path.isfile(sub_file) & sub_file.endswith(remove_suffix):
print(f'删除的文件为:{sub_file}')
os.remove(sub_file)
def key_rename(folder_path, *args):
"""批量文件重命名方法1"""
print('此工具支持查找有相同名字的文件进行替换重命名')
old_key = input('输入查找关键字:')
new_key = input('输入替换关键字:')
# walk方法递归往下查找到所以文件夹和文件
for main_folder_path, folder_path, file_path in os.walk(folder_path):
# print(main_folder_path) # D:\pythonBasics\os模块\修改文件\新建文件夹
for filename in file_path:
old_file_path = os.path.join(main_folder_path, filename)
# print(old_file_path) # 'D:\pythonBasics\os模块\修改文件\新建文件夹\mm-1.jpg'
if old_key in old_file_path:
# 将用于查找的关键字替换为要设置的新关键字
new_file_path = os.path.join(main_folder_path, filename.replace(old_key, new_key))
print(new_file_path)
# 判断旧路径是否是文件 (保险,避免把文件夹也改名了)
if os.path.isfile(old_file_path):
os.rename(old_file_path, new_file_path)
print(f'{old_file_path} >>> {new_file_path}')
def all_file_rename(path, *args):
"""批量文件重命名方法2"""
print('此工具支持自定义文字进行文件重命名')
suffix = input('请输入要修改文件的后缀(.jpg .png ...) >>>')
# 什么都不填,回车即为False
rev = bool(input('设置翻转(默认False eg:{xxx-}1{.jpg} | True eg: 1{-xxx}{.jpg}) :bool >>>'))
custom_words = input('请输入自定义关键字: (建议加-可以很有效的排序) >>>')
set_suffix = input('请输入修改后文件的后缀:(.jpg .png ...) >>>')
n = 0
for filename in os.listdir(path):
old_file_path = os.path.join(path, filename) # 旧文件路径
old_file_prefix,old_file_suffix = os.path.splitext(filename)
# 判断是否为规定的后缀格式(不是就跳过)
if old_file_suffix != suffix:
continue
num = str(n + 1)
var_revers = lambda x: path + os.sep + num + custom_words + set_suffix if x == True else path + os.sep + custom_words + num + set_suffix
# 设置新文件路径
new_file_path = var_revers(rev)
# new_file_path = path + os.sep + custom_words + str(n + 1) + set_suffix
os.rename(old_file_path, new_file_path) # 用os模块中的rename方法对文件改名
print(f'{old_file_path} >>> {new_file_path}')
n += 1
def run():
function_dict = {'1': key_rename, '2': all_file_rename, '3': files_remove}
while True:
print('======================================欢迎使用文件批处理工具======================================')
folder_path = input('请输入文件路径(建议直径复制)>>> ')
print('你有以下功能选择(1.以匹配关键字进行重命名; 2.以自定义的字+序号进行重命名)')
choice = input('请选择(按q/Q退出)>>>')
if choice.upper() == 'Q':
return
func = function_dict.get(choice)
if not func:
print('请输入正确的序号')
continue
func(folder_path)
if __name__ == '__main__':
run()
运行成果展示:
文章是从我自己博客搬过来的,想不到写啥,随便看看吧😀
|