利用 Python 批量修改文件名
程序员文章站
2022-06-17 09:30:24
开发的第一步,首先得熟悉脚本中使用的模块函数,废话不多说,开干! 1 函数介绍 1.1 os 模块 (1)os.lisdir() 此函数的作用即列出指定目录下的所有文件与目录的名,并以列表形式展现。 (2)os.path.splitext() 在函数中指定一个文件名,用于分割文件名与后缀,结果存储于 ......
开发的第一步,首先得熟悉脚本中使用的模块函数,废话不多说,开干!
1 函数介绍
1.1 os 模块
(1)os.lisdir()
>>> import os >>> print(os.listdir()) ['.env', 'rename.py', '.rename.py.swp']
此函数的作用即列出指定目录下的所有文件与目录的名,并以列表形式展现。
(2)os.path.splitext()
>>> import os >>> print(os.path.splitext('rename.py')) ('rename', '.py')
在函数中指定一个文件名,用于分割文件名与后缀,结果存储于元组中
(3)os.path.join()
>>> import os >>> print(os.path.join('/etc','nginx','nginx.conf')) /etc/nginx/nginx.conf
将函数中的目录、文件组合成一个路径
(4)os.rename()
>>> import os >>> os.rename('src','dest') # src 为原文件名,dest 为目标文件名
将目录或文件重命名
1.2 argparse 模块
python 中内置模块,用于解析给出的函数参数,生成有用信息。
# argparse 模块示例源码 [root@localhost python]# cat test.py import argparse parser = argparse.argumentparser(description='process some integers.') parser.add_argument('integers', metavar='n', type=int, nargs='+', help='an integer for the accumulator') parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the integers (default: find the max)') args = parser.parse_args() print(args.accumulate(args.integers)) print(args.integers) # 使用示例 [root@localhost python]# python test.py -h usage: test.py [-h] [--sum] n [n ...] process some integers. positional arguments: n an integer for the accumulator optional arguments: -h, --help show this help message and exit --sum sum the integers (default: find the max) [root@localhost python]# python test.py 123 45 8 --sum 176 # 求和后的值 [123, 45, 8] [root@localhost python]# python test.py 123 45 8 123 # 未添加 sum 参数,默认显示参数中最大值,对应 add_argument 的 default=max [123, 45, 8] # 示例摘自链接:https://wiki.jikexueyuan.com/project/explore-python/standard-modules/argparse.html
argparse 模块的使用分为四步走,模块导入 -> argumentparser 创建对象 -> add_argument 添加参数 -> parse_args 调用
add_argument 函数中部分参数含义:
metavar # 在 usage 中显示的参数名称 type # 接收到的参数,需转换成的目标类型 nargs # 表示参数个数,上例使用 +,代表有1个或多个参数 help # usage 中显示的参数帮助信息 dest # 可用此参数重定义的值访问参数(args.accumulate(args.integers)),基于上面示例
2 脚本文件
import argparse,os # 解析参数,并生成 usage 提示,-h 显示帮助 def parse(): parser = argparse.argumentparser(description='批量修改文件名') parser.add_argument('target_dir', metavar='target_dir', type=str, nargs=1, help='需批量修改文件所在目录') parser.add_argument('old_ext', metavar='old_ext', type=str, nargs=1, help='旧文件后缀') parser.add_argument('new_ext', metavar='new_ext', type=str, nargs=1, help='新文件后缀') return parser def filename_modify(target_dir,old_ext,new_ext): for filename in os.listdir(target_dir): file = os.path.splitext(filename) # 将文件名与后缀分割开 file_ext = file[1] # 获得旧后缀 if old_ext == file_ext: # 查看此目录中是否有需修改的旧后缀文件 newname = file[0] + new_ext # 文件或目录重命名 os.rename( os.path.join(target_dir, filename), os.path.join(target_dir, newname) ) def main(): parser = parse() args = vars(parser.parse_args()) work_dir = args['target_dir'][0] old_ext = args['old_ext'][0] new_ext = args['new_ext'][0] if old_ext[0] != '.': old_ext = '.' + old_ext if new_ext[0] != '.': new_ext = '.' + new_ext filename_modify(work_dir,old_ext,new_ext) if __name__ == '__main__': main()
main 函数中,args的值类似如下内容
python rename.py /root/test txt py {'work_dir': ['/root/test'], 'old_ext': ['txt'], 'new_ext': ['py']}
因此,在 main 中,第一个索引 0 取的值为运行的命令行参数(列表),第二个索引值 0 用于判断带参数运行的文件后缀参数是否带有点
——————————————————————— end ———————————————————————