[python]为指定目录下的文件名批量加前缀
前言
功能描述:批量重命名指定目录下的文件,文件名加前缀,默认格式为“目录名_原文件名”。
示例代码
import argparse
import os
import sys
import logging
def gen_args():
"""
说明
-----
解析命令行参数
"""
parser = argparse.ArgumentParser(prog="批量文件重命名工具", description="批量重命名目录中的文件名, 新文件名为'目录名_文件名'")
parser.add_argument("-d", "--dir", type=str, required=True, help="必填, 待处理目录名")
parser.add_argument("-p", "--prefix", type=str, help="可选, 待修改文件名的前缀, 默认同目录名")
parser.add_argument("-r", "--replace", action="store_true", help="修改文件名, 默认不修改")
parser.add_argument("-v", "--version", action="version", version="批量文件重命名工具, version 1.2", help="打印版本信息")
args = parser.parse_args()
return args
def batchRename(directory_name: str, prefix: str, isReplace: bool = False):
"""
说明
-----
重命名文件
参数
-----
directory_name: str
待批量重命名文件的目录
prefix: str
文件重命名的前缀
isReplace: bool
是否对文件进行重命名, 默认不修改, 避免重命名后的文件名不符合要求
"""
if not os.path.exists(directory_name):
logging.critical(f"目录 {directory_name} 不存在")
sys.exit(1)
for file in os.listdir(directory_name):
# 如果前缀和目录名一致, 则中间建一个下划线
if directory_name == prefix:
new_filename = f"{prefix}_{file}"
else:
new_filename = f"{prefix}{file}"
logging.info(f"新文件名: {os.path.join(directory_name,new_filename)}")
if isReplace:
os.rename(os.path.join(directory_name,file),os.path.join(directory_name,new_filename))
# 提示信息
if isReplace:
logging.info("文件重命名完成")
else:
logging.warning("未指定 '-r', 文件名将不修改")
if __name__ == "__main__":
# 自定义日志配置
logFormat = f"[%(asctime)s] [%(levelname)s] %(filename)s[line:%(lineno)d] %(message)s"
logging.basicConfig(level=logging.INFO, format=logFormat, datefmt="%Y-%m-%d %H:%M:%S")
args = gen_args()
directory_name = args.dir
# 如果未手动指定前缀, 修改后的文件名前将加上目录名作为前缀
if args.prefix is None:
prefix = directory_name
else:
prefix = args.prefix
batchRename(directory_name, prefix, args.replace)
pyinstaller打包
自己用的话可以直接运行python脚本,如果给别人用,一般借助pyinstaller打包成二进制可执行文件。代码中用到的也都是标准库,创建一个虚拟环境后pip装个pyinstaller就行了。
# 打包示例。结果文件在dist目录
pyinstaller -F batch_rename.py --clean
使用效果
[python]为指定目录下的文件名批量加前缀的更多相关文章
- python获取指定目录下所有文件名os.walk和os.listdir
python获取指定目录下所有文件名os.walk和os.listdir 觉得有用的话,欢迎一起讨论相互学习~Follow Me os.walk 返回指定路径下所有文件和子文件夹中所有文件列表 其中文 ...
- python实现指定目录下批量文件的单词计数:并发版本
在 文章 <python实现指定目录下批量文件的单词计数:串行版本>中, 总体思路是: A. 一次性获取指定目录下的所有符合条件的文件 -> B. 一次性获取所有文件的所有文件行 - ...
- Python获取指定目录下所有子目录、所有文件名
需求 给出制定目录,通过Python获取指定目录下的所有子目录,所有(子目录下)文件名: 实现 import os def file_name(file_dir): for root, dirs, f ...
- Python--通过索引excel表将文件进行文件夹分类的脚本+读取指定目录下所有文件名的脚本
1.通过索引excel表将文件进行文件夹分类的脚本,此脚本由于将ip和id对应并生成对应id的文件夹将文件进行分类,也可以任意规定表格内容,通过vul_sc_ip.txt和xlsx文件进行索引. # ...
- Java 读取指定目录下的文件名和目录名
需求:读取指定目录下的文件名和目录名 实现如下: package com.test.common.util; import java.io.File; public class ReadFile { ...
- python中获取指定目录下所有文件名列表的程序
http://blog.csdn.net/rumswell/article/details/9818001 # -*- coding: utf-8 -*-#~ #------------------- ...
- Python列出指定目录下的子目录/文件或者递归列出
1.python只列出当前目录(或者指定目录)下的文件或者目录条目 import os files,dirs=[],[] for item in os.listdir(): if os.path.is ...
- [python] 在指定目录下找文件
import os # 查找当前目录下所有包含关键字的文件 def findFile(path, filekw): return[os.path.join(path,x) for x in os.li ...
- python获取指定目录下特定格式的文件名
之前一直用windows下的bat脚本获取一个目录下的指定格式的文件名,如下所示: dir *.jpg /b/s > train.set pause 十分简单,将这个bat文件放到你想要获取文件 ...
- python把指定目录下的递归所有目录和文件名转换成小写或大写
cat convert.py #!/usr/bin/env python # -*- coding:utf-8 -*- import os, sys def convert(rootdir, opty ...
随机推荐
- ai问答:使用 Vue3 组合式API 和 TS 父子组件共享数据
这是一个使用 Vue3 组合式 API 和 TypeScript 的简单父子组件共享数据示例 父组件 Parent.vue: <template> <div> <p> ...
- #PowerBI 1分钟学会,利用format函数,自定义格式显示
PowerBI是一款强大的数据分析和可视化工具,它可以帮助我们快速地创建各种报表和仪表盘,展示数据的洞察和价值. 在PowerBI中,有许多内置的函数可以帮助我们处理和转换数据,其中一个常用的函数就是 ...
- 2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p
2022-05-22:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 x ...
- vue全家桶进阶之路36:Vue3 全局路由useRouter和本地路由useRoute
在 Vue.js 3.x 中,我们可以使用 useRouter 和 useRoute 来获取当前路由对象和当前路由信息. useRouter useRouter 可以用来获取当前路由对象.我们可以通过 ...
- 【C#/.NET】使用ASP.NET Core对象池
Nuget Microsoft.Extensions.ObjectPool 使用对象池的好处 减少初始化/资源分配,提高性能.这一条与线程池同理,有些对象的初始化或资源分配耗时长,复用这些对象减少初始 ...
- 【QCustomPlot】性能提升之修改源码(版本 V2.x.x)
说明 使用 QCustomPlot 绘图库的过程中,有时候觉得原生的功能不太够用,比如它没有曲线平滑功能:有时候又觉得更新绘图数据时逐个赋值效率太低,如果能直接操作内存就好了:还有时候希望减轻 CPU ...
- 如何用ReadWriteLock实现一个通用的缓存中心?
摘要:在并发场景中,Java SDK中提供了ReadWriteLock来满足读多写少的场景. 本文分享自华为云社区<[高并发]基于ReadWriteLock开了个一款高性能缓存>,作者:冰 ...
- 使用C语言实现简单的通用的链表
在数据结构中,我们已经学习到了简单的静态链表以及单链表和双链表,它们各有优缺点,但是有个共同的问题是他们呢无法存储不同的数据.下面提供了一种方法,可以将不同节点的数据链接起来. 下面的代码都是基础的C ...
- ESP8266-01S烧录固件
ESP8266-01S 整理了一下ESP01S的烧录固件和烧录APP 链接:https://pan.baidu.com/s/1DApOQcWhqvk378ZklJSypA 提取码:1028 文件夹包含 ...
- Spring Boot实现高质量的CRUD-5
(续前文) 9.Service实现类代码示例 以用户管理模块为例,展示Service实现类代码.用户管理的Service实现类为UserManServiceImpl.UserManServi ...