用os模块实现文件的重命名
##**简介**利用python os模块编写脚本批量处理文件重命名,两种方法任君选择。通过指定文件后缀也可以批量删除文件。
![表情包图片](https://www.aicartoon.top/usr/uploads/2023/02/783000253.jpg)
##**编程环境**
+ Python 3.8版本
+ Python的标准库os
+ 使用pyCharm作为代码编辑器
##**实现思路**
+ 获取指定目录下的所有文件,可以通过walk方法将目录下所有文件夹和文件获取到
+ 再使用os.path.join方法进行路径拼接出旧文件路径
+ 设置一个用于查找的关键字关键词和一个用于修改的关键词,并判断查找词是否在旧文件路径中
+ 如果在则设置新文件路径并使用replace(oldkey, newkey) 替换原来文件名实现重命名
+ 最后用os.rename(old_file_path, new_file_path) 完成方法一的重命名操作
+ 看不懂,直接源码分析吧😂
##**代码示例**
```python
import os
"""批量修改文件重命名和删除目录下指定后缀文件"""
def files_remove(file_path):
"""批量删除文件"""
print('此工具通过输入文件后缀进行批量删除文件')
remove_suffix = input('输入要删除文件的后缀: (.jpg .png ...) >>>')
sub_files = list()
# 获取该目录下所有的子目录, 列表中存储文件的绝对路径
if os.path.isdir(file_path):
sub_files =
# 遍历该目录, 判断是否有目标尾缀的文件,有进行删除
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()
```
##**运行成果展示:**
!(https://www.aicartoon.top/usr/uploads/2023/02/4120818516.png)
文章是从我自己博客搬过来的,想不到写啥,随便看看吧😀 实现代码很简单问题是pycharm 背景如何设置的 终于有看得懂的代码了,另外楼上说的对,怎么换{:17_1080:} 本帖最后由 O2H2O 于 2023-3-18 09:44 编辑
rev = bool(input('设置翻转(默认False eg:{xxx-}1{.jpg} | True eg: 1{-xxx}{.jpg}):bool >>>'))
小白提问:这里rev是为了获取一个布尔值,不过('设置翻转(默认False eg:{xxx-}1{.jpg} | True eg: 1{-xxx}{.jpg}):bool >>>')这里没懂,能不能帮忙解释一下呀,谢谢啦!
asd124689 发表于 2023-3-18 07:54
实现代码很简单问题是pycharm 背景如何设置的
网上有方法,直接搜pycharm换背景图片就想好啦😊 本帖最后由 redballoon 于 2023-3-18 10:17 编辑
O2H2O 发表于 2023-3-18 09:37
rev = bool(input('设置翻转(默认False eg:{xxx-}1{.jpg} | True eg: 1{-xxx}{.jpg}):bool >>>'))
小白 ...
有两种命名方式,自定义的在前或在后,而数字1是固定有的,比如pic-1.jpg或者1-pic.jpg这样。你问得其实是我随便写的提示信息,告诉你输入结果是布尔值,来设置是否翻转而已 有点意思,正好有类似需求,学习学习
页:
[1]