吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 826|回复: 6
收起左侧

[学习记录] 用os模块实现文件的重命名

[复制链接]
redballoon 发表于 2023-3-17 23:02

简介

利用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()

运行成果展示:

Snipaste_2023-02-19_21-16-30.png
文章是从我自己博客搬过来的,想不到写啥,随便看看吧😀

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
yjn866y + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

asd124689 发表于 2023-3-18 07:54
实现代码很简单  问题是pycharm 背景如何设置的
ManaCola 发表于 2023-3-18 08:12
终于有看得懂的代码了,另外楼上说的对,怎么换
O2H2O 发表于 2023-3-18 09:37
本帖最后由 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 >>>')这里没懂,能不能帮忙解释一下呀,谢谢啦!
 楼主| redballoon 发表于 2023-3-18 10:10
asd124689 发表于 2023-3-18 07:54
实现代码很简单  问题是pycharm 背景如何设置的

网上有方法,直接搜pycharm换背景图片就想好啦😊
 楼主| redballoon 发表于 2023-3-18 10:15
本帖最后由 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这样。你问得其实是我随便写的提示信息,告诉你输入结果是布尔值,来设置是否翻转而已
78zhanghao87 发表于 2023-3-18 11:37
有点意思,正好有类似需求,学习学习
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表