开发的第一步,首先得熟悉脚本中使用的模块函数,废话不多说,开干!

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 ———————————————————————

利用 Python 批量修改文件名的更多相关文章

  1. 利用python批量修改word文件名的方法示例

    利用python批量修改word文件名的方法示例 最近不小心把硬盘给格式化了,由于当时的文件没有备份,所以一下所有的文件都没有了,于是只能采取补救措施,用文件恢复软件恢复了一部分的数据出来,但是恢复完 ...

  2. python:批量修改文件名批量修改图片尺寸

    批量修改文件名  参考博客:https://www.cnblogs.com/zf-blog/p/7880126.html 功能:批量修改文件名 1 2 3 4 5 6 7 8 9 10 11 12 1 ...

  3. 用python批量修改文件名

    从youtube上当下来百来首mv,每个都需要去掉视频,这还挺好弄得,格式工厂一弄就完了,但是文件名,都带有乱七八糟的*啥的巴拉巴拉的,咋修改啊,几百首总不可能一个一个rename吧 #批量修改文件名 ...

  4. ML二:python批量修改文件名-测试KDTree

    (1):#批量修改文件名 import os import numpy as np import string import shutil prefix =''#单引号,前缀! sufix ='txt ...

  5. Python批量修改文件名-后缀

    LyncLynn用途: 批量修改文件格式,文件名后缀. #Version: V1.0 #Author:lynclynn #Description:Change the filename #Create ...

  6. Python 批量修改文件名

    最近下载了几部美剧(越狱.迷失.权利的游戏......),每集文件名都好长好长..想改短一些,但一个一个改太累了,于是写了个脚本来实现批量修改: 修改前文件名: 修改后文件名: 代码实现: #enco ...

  7. Python批量修改文件名(os库)

    问题: 在某一文件夹内有97个sql文件,全部都以统一格式命名,例如“A201222-广州李小龙纪念协会-1-广州李小龙纪念协会-2018.AUD” 由于有两段重复了,而且中间的“1”也没有意义,需要 ...

  8. 视频合并时使用python批量修改文件名

    不知道大家有没有遇到这样的情况,比如视频合并时文件名没有按照正常顺序排列,像这样 可见,文件名排序是乱的.这个样子合并出来的视频一定也是乱的.所以得想办法把文件名修改一下,让软件读取出正确的顺序.闲话 ...

  9. Python批量修改文件名与后缀

    引言: 有时因为文件版本的更新,后缀名会发生变化,例如Word13的docx到Word16的doc,又例如我们想修改音频文件的后缀.一个一个修改后缀名往往很麻烦,于是我们便可以写一个Python的脚本 ...

随机推荐

  1. Java 泛型 四 基本用法与类型擦除

    简介 Java 在 1.5 引入了泛型机制,泛型本质是参数化类型,也就是说变量的类型是一个参数,在使用时再指定为具体类型.泛型可以用于类.接口.方法,通过使用泛型可以使代码更简单.安全.然而 Java ...

  2. bzoj1604

    treap+并查集 我们能想到一个点和最近点对连接,用并查集维护,但是这个不仅不能求,而且还是不对的,于是就看了题解 把距离转为A(x-y,x+y),这样两点之间的距离就是max(x'-X',y'-Y ...

  3. JavaScript代码优化新工具UglifyJS

    jQuery 1.5 发布的时候 john resig 大神说所用的代码优化程序从Google Closure切换到UglifyJS,新工具的压缩效果非常令人满意. UglifyJS 是一个服务端no ...

  4. springcloud 向Eureka中注册服务异常java.net.ConnectException: Connection refused: connect

    异常如下: 通过debug发现,服务端的url地址仍然是默认的http://localhost:8761/eureka/apps/,也就是说yml文件中配置没有生效,检查后发现yml中相关配置多写了一 ...

  5. mybatis批量update操作的写法,及批量update报错的问题解决方法

    mybatis的批量update操作写法很简单,如下: public interface YourMapper extends BaseMapper<YourExt> { void upd ...

  6. C++ 值初始化和默认初始化

    对于初始化的问题,我之前一直傻傻分不清.有关初始化以及赋值的区别也是一问题,这次回过头来看,配合<<CSAPP>>的内容,对初始化有了一些新的认识. 声明: 在环境/上下文中指 ...

  7. 洛谷 P2365 任务安排【dp】

    其实是可以斜率优化的但是没啥必要 设st为花费时间的前缀和,sf为Fi的前缀和,f[i]为分组到i的最小花费 然后枚举j转移,考虑每次转移都是把j到i分为一组这样意味着j及之后的都要增加s的时间,同时 ...

  8. Moco模拟服务器post&get请求 (二)

    1.moco启动命令如下:java -jar moco-runner-0.12.0-standalone.jar 协议类型 -p 端口号 -c json配置文件 2.带参数的get请求 [ { &qu ...

  9. 小记 vue 打包(build)需要注意的一些事

    记录 vue 项目打包的一些事情 首先声明项目都是由 vue-cli 生成; vue 项目从 dev 切换到 prod 时有很多地方需要注意; 首先是大家最需要注意的 ajax 切换环节 以前一开始用 ...

  10. 洛谷 P1462 通往奥格瑞玛的道路(spfa+二分搜索)(4boy)

    原题:http://www.luogu.org/problem/show?pid=1462#sub 4boy: 大意:给出n个城市,有m条路,每经过一个城市都要交钱,每经过一条道路都要扣HP,有HP上 ...