python项目2-批量重命名指定目录下面所有文件的后缀名

脚本需要用到的Argparse模块:

argparse模块主要用来为脚本传递命令参数功能,使他们更加灵活。

使用方法:
1.建立解析器

import argparse
parser = argparse.ArgumentParser()

2.定义参数
当程序中有多个参数,调用parse_args()时,会先识别参数名称所有带前缀’-'的参数,然后再将剩余的参数按照顺序视为对应位置上的参数。

ArgumentParser.add_argument(name or flags…, [action], [nargs], [const], [default], [type], [choices], [required], [help], [metavar], [dest])

name or flags:参数的名称,有两种表示方式,可选参数和位置参数。
添加可选参数:parser.add_argument(’-f’, ‘–foo’)
添加位置参数:parser.add_argument(‘bar’)

nargs:可以让多个参数与一个动作都联系

type : 命令行参数应当被转换成的类型

metavar:修改参数在帮助信息中显示值

以下是代码:

import argparse
import os

#argparse主要用来为脚本传递命令参数功能,使他们更加灵活

#批量重命名指定目录下面所有文件的后缀名
def batch_rename(work_dir, old_ext, new_ext):
    #os.listdir() 方法用于返回指定的文件夹包含的文件或文件夹的名字的列表。
    for filename in os.listdir(work_dir):
        split_file = os.path.splitext(filename) #分离文件名与扩展名 filename是文件路径
        root_name, file_ext = split_file #文件名,后缀名
        if old_ext == file_ext:
            #修改后文件的完整名称
            newfile = root_name + new_ext
            #连接两个或者更多的路径名组件,如果各组件名首字母不包含’/’,则函数会自动加上
            os.rename(
                os.path.join(work_dir, filename),
                os.path.join(work_dir, newfile)
            )
    print("完成重命名!")
    print(os.listdir(work_dir))

def get_parser():
    #创建一个ArgumentParser对象,包含将命令行解析成python数据类型所需的全部信息
    #description help时显示的开始文字
    parser = argparse.ArgumentParser(description='change extension of files in a working directory')
    #添加参数 work_dir一个命名或者一个选项字符串的列表 metavar:修改参数在帮助信息中显示值
    #type : 命令行参数应当被转换成的类型 参数nargs可以让多个参数与一个动作都联系 help - 一个此选项作用的简单描述
    parser.add_argument('work_dir', metavar='WORK_DIR', type=str, nargs=1, help='the directory where to change extension')
    parser.add_argument('old_ext', metavar='OLD_EXT', type=str, nargs=1, help='old extension')
    parser.add_argument('new_ext', metavar='NEW_EXT', type=str, nargs=1, help='new extension')
    return parser

def main():
    #命令行参数
    parser = get_parser()
    # 返回值是一个namespace对象,是一个非常简单的类 通过vars()将之转换成字典类型
    args = vars(parser.parse_args()) #将命令行参数字符串转换为相应对象并赋值给namespace对象的相应属性
    #从命令行参数中依次解析出参数
    work_dir = args['work_dir'][0]
    old_ext = args['old_ext'][0]
    if old_ext and old_ext[0] != '.':
        old_ext = '.' + old_ext
    new_ext = args['new_ext'][0]
    if new_ext and new_ext[0] != '.':
        new_ext = '.' + new_ext

    batch_rename(work_dir, old_ext, new_ext)

if __name__ == '__main__':
    main()

使用时 在run-Edit configurations中Parameters输入命令行指令

python项目2-批量重命名指定目录下面所有文件的后缀名_第1张图片

如图所示 代码可将当前目录的后缀为.py的文件改成后缀为.txt的文件

你可能感兴趣的:(项目,python)