Python3-批量重命名指定目录中的一组文件,更改其扩展名
Python3-批量重命名指定目录中的一组文件,更改其扩展名
- 1.argparse模块
- 2.vars内置函数
- 3.os.listdir(path)
- 4.os.path.splitext(filepath)
- 5.os.path.join
- 6.os.rename
- 7.os.path.isfile
- 8.批量重命名指定目录中的一组文件,更改其扩展名
1.argparse模块
argparse 是 Python 中用于解析命令行参数的标准库模块。
1. 导入 argparse 模块
要使用 argparse 模块,首先需要导入它:
import argparse
2. 创建 ArgumentParser 对象
在使用 argparse 解析命令行参数之前,需要创建一个 ArgumentParser 对象。这个对象将包含所有的命令行参数定义。
parser = argparse.ArgumentParser(description='Description of your program')
在创建 ArgumentParser 对象时,可以指定一个可选的参数 description,用于描述你的程序。
3. 添加命令行参数
使用 add_argument() 方法向 ArgumentParser 对象添加命令行参数。该方法接受一些参数,用于指定命令行参数的名称、类型、帮助信息等。
parser.add_argument('arg_name', type=str, help='Help message for the argument')
上述代码示例中,arg_name 是命令行参数的名称,type 参数指定了参数的类型(这里是字符串类型),help 参数用于提供命令行帮助信息。
上面添加的是位置参数,载明行中按照顺序传递的参数。可选参数是在命令行中使用选项标志(例如 -h 或 --help)传递的参数,可以根据需要选择是否提供。可以使用 add_argument 方法来定义可选参数。
parser.add_argument('--verbose', action='store_true', help='Enable verbose mode')
parser.add_argument('--output', type=str, help='Specify the output file')
在上述示例中,我们定义了两个可选参数,分别是 --verbose 和 --output。--verbose 参数使用 store_true 动作,表示如果存在该选项,则将参数的值设为 True。--output 参数接受一个字符串作为值。
add_argument() 方法还接受其他一些可选参数,例如:
action:指定参数的行为,如存储值、统计参数出现次数等。default:指定参数的默认值。choices:限制参数的取值范围。required:指定是否参数是必需的。
parser.add_argument('--count', type=int, default=1, help='Specify the count')
parser.add_argument('--color', choices=['red', 'green', 'blue'], help='Specify the color')
parser.add_argument('--required-arg', required=True, help='This argument is required')
在上述示例中,--count 参数被指定为整数类型,并设置了默认值为 1。--color 参数只能接受在给定的选项列表 ['red', 'green', 'blue'] 中的值。--required-arg 参数被设置为必需的,不提供该参数将触发错误。
4. 解析命令行参数
一旦所有的命令行参数都被添加到 ArgumentParser 对象中,可以使用 parse_args() 方法解析命令行参数。该方法将返回一个包含解析结果的命名空间对象。
args = parser.parse_args()
完整示例
下面是一个完整的示例,演示如何使用 argparse 解析命令行参数:
import argparseparser = argparse.ArgumentParser(description='Example program for argparse')parser.add_argument('name', type=str, help='Name of the user')
parser.add_argument('--age', type=int, help='Age of the user')args = parser.parse_args()print('Name:', args.name)
print('Age:', args.age)
假设上述代码保存为 example.py 文件,可以在命令行中运行以下命令进行测试:
python example.py John --age 25
输出结果将会是:
Name: John
Age: 25
2.vars内置函数
在 Python 中,vars() 是一个内置函数,用于返回对象的属性和属性值的字典。它可以应用于模块、类、实例或其他拥有__dict__属性的对象。__dict__是一个字典,包含了对象的属性和对应的值。
以下是 vars() 函数的使用示例:
1.对于模块
import math
print(vars(math)) # 返回 math 模块的属性和属性值的字典
2. 对于类
class Person:def __init__(self, name, age):self.name = nameself.age = ageperson = Person("Alice", 25)# 获取对象的属性和属性值的字典
person_dict = vars(person)
print(person_dict)
输出:
{'name': 'Alice', 'age': 25}
使用 vars() 函数,我们可以获取 person 对象的属性和属性值的字典,并将其存储在 person_dict 变量中。输出结果显示了 person_dict 字典,其中包含了对象的属性名和对应的属性值。
需要注意的是,vars() 函数只能用于获取普通对象(具有实例变量)的属性和属性值,而不能用于获取内置对象(如列表、字典)的属性和属性值。对于内置对象,可以使用相应的方法(如 dir())来获取属性和方法列表。
3.os.listdir(path)
os.listdir() 函数接受一个路径作为参数,并返回该路径下的所有文件和文件夹的列表。在这个例子中,路径参数 . 表示当前目录。
以下是示例代码:
import os# 列出当前目录下的文件和文件夹
files = os.listdir(".")
for file in files:print(file)
4.os.path.splitext(filepath)
os.path.splitext() 是 Python 的 os.path 模块中的函数,用于将文件路径分割为文件名和文件扩展名。它返回一个包含文件名和扩展名的元组。
以下是 os.path.splitext() 的用法示例:如果文件路径不包含扩展名,extension 变量将是一个空字符串。
import osfile_path = "/path/to/file.txt"
filename, extension = os.path.splitext(file_path)print("Filename:", filename) # 输出文件名部分
print("Extension:", extension) # 输出扩展名部分
'''
Filename: /path/to/file
Extension: .txt
'''
5.os.path.join
os.path.join() 是 Python 的 os.path 模块中的函数,用于将多个路径组合成一个完整的路径。
以下是 os.path.join() 的用法示例:
import os# 组合路径
path = os.path.join("dir1", "dir2", "file.txt")
print(path)
在这个例子中,os.path.join() 接受多个路径参数,并将它们组合成一个完整的路径。每个参数可以是字符串,表示路径的各个部分。
输出将显示组合后的完整路径:dir1/dir2/file.txt
os.path.join() 函数的特点是它会根据操作系统的规则自动处理路径分隔符。它会根据当前操作系统的约定,使用适当的路径分隔符(例如 / 或 \)来组合路径。
这使得代码在不同操作系统上具有可移植性,而无需显式指定路径分隔符。
os.path.join() 只是将路径组合成一个字符串,它不会检查路径是否存在或验证路径的有效性。它只是简单地将给定的路径部分连接在一起,形成一个完整的路径字符串。
6.os.rename
os.rename() 是 Python 的 os 模块中的函数,用于对文件或目录进行重命名操作。
以下是 os.rename() 的用法示例:
import os# 重命名文件或目录
old_name = "old_name.txt"
new_name = "new_name.txt"
os.rename(old_name, new_name)
需要注意的是,os.rename() 函数只能对存在的文件或目录进行重命名操作,而且它不会递归地重命名目录下的所有子目录和文件。
如果要对目录进行重命名操作,目录必须为空,否则会引发 OSError 异常。如果要对非空目录进行重命名,可以使用 shutil 模块中的 shutil.move() 函数。
os.rename函数可以用于重命名文件和目录。如果当前文件或目录不存在,或者新名称已经存在,将会引发相应的异常。确保在使用os.rename函数之前,您已经检查了相关的条件,以避免出现错误。
7.os.path.isfile
os.path.isfile() 是 Python 的 os.path 模块中的函数,用于检查给定路径是否为文件。
以下是 os.path.isfile() 的用法示例:
import osfile_path = "/path/to/file.txt"
if os.path.isfile(file_path):print("路径是一个文件")
else:print("路径不是一个文件")
在这个例子中,os.path.isfile() 函数接受一个路径作为参数,并返回一个布尔值。如果给定路径指向一个文件,则返回 True;否则,返回 False。
通过使用 if 语句,可以根据 os.path.isfile() 的返回值来执行相应的操作。在这个例子中,如果路径 file_path 是一个文件,就会打印 “路径是一个文件”;否则,会打印 “路径不是一个文件”。
请注意,os.path.isfile() 只检查给定路径是否为文件,而不会检查文件是否存在。如果路径不存在或指向一个目录,os.path.isfile() 仍然会返回 False。
因此,在使用 os.path.isfile() 函数之前,最好先确保路径存在,或者结合其他函数(如 os.path.exists())一起使用,来进行路径的有效性检查。
8.批量重命名指定目录中的一组文件,更改其扩展名
import argparse
import osdef batch_rename(work_dir, old_ext, new_ext):"""This will batch rename a group of files in a given directory,once you pass the current and new extensions"""# files = os.listdir(work_dir)for filename in os.listdir(work_dir):# Get the file extensionsplit_file = os.path.splitext(filename)# Unpack tuple elementroot_name, file_ext = split_file# Start of the logic to check the file extensions, if old_ext = file_extif old_ext == file_ext:# Returns changed name of the file with new extentionnewfile = root_name + new_ext# Write the filesos.rename(os.path.join(work_dir, filename), os.path.join(work_dir, newfile))print("rename is done!")print(os.listdir(work_dir))def get_parser():parser = argparse.ArgumentParser(description="change extension of files in a working directory")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 parserdef main():"""This will be called if the script is directly invoked."""# adding command line argumentparser = get_parser()args = vars(parser.parse_args())# {'work_dir': ['.'], 'old_ext': ['txt'], 'new_ext': ['tmd']}print(args)# Set the variable work_dir with the first argument passedwork_dir = args["work_dir"][0]# Set the variable old_ext with the second argument passedold_ext = args["old_ext"][0]if old_ext and old_ext[0] != ".":old_ext = "." + old_ext# Set the variable new_ext with the third argument passednew_ext = args["new_ext"][0]if new_ext and new_ext[0] != ".":new_ext = "." + new_extprint(work_dir) # .print(old_ext) # .txtprint(new_ext) # .tmdbatch_rename(work_dir, old_ext, new_ext)# python main.py . txt tmd
if __name__ == "__main__":main()
相关文章:
Python3-批量重命名指定目录中的一组文件,更改其扩展名
Python3-批量重命名指定目录中的一组文件,更改其扩展名 1.argparse模块2.vars内置函数3.os.listdir(path)4.os.path.splitext(filepath)5.os.path.join6.os.rename7.os.path.isfile8.批量重命名指定目录中的一组文件,更改其扩展名 1.argparse模块 argpa…...
渗透测试KAILI系统的安装环境(第八课)
KAILI系统的安装环境(第八课) Kaili是一款基于PHP7的高性能微服务框架,其核心思想是面向服务的架构(SOA),支持http、websocket、tcp等多种通信协议,同时还提供了RPC、Service Mesh、OAuth2等功能。Kaili框架非常适合构…...
如何正确方便的理解双指针?力扣102 (二叉树的层序遍历)
双指针,顾名思义就是指针的指针。 在此之前我们需要先理解单指针 (简称为指针)。指针很简单,直接上例子:例:现有两个变量,a10,b20. 要求:交换他们的值,输出的结果应为a20…...
Vue或uniapp引入自定义字体
一、为什么引入字体 对于大部分APP或网站而言,字体是很重要的一部分。在前端开发中,选用合适的字体往往会极大地提升网站的视觉体验。然而,网页中默认字体的种类和风格有限,且在不同的设备、浏览器上渲染效果不尽相同。因此&…...
力扣:LCR 122. 路径加密 题目:剑指Offer 05.替换空格(c++)
本文章代码以c为例! 力扣:LCR 122. 路径加密 题目: 代码: class Solution { public:string pathEncryption(string path) {for(int i0;i<path.size();i){if(path[i].){path[i] ;}}return path;} }; 难度升级(原…...
cJson堆内存释放问题
cJSON_Delete(),是用来释放json对象的,释放父JSON对象后,子JSON对象也会被释放。 CJSON_free(),是用来释放其他对象的。 int main(void) {cJSON* cjson_test NULL;cJSON* cjson_address NULL;cJSON* cjson_skill NULL;char* s…...
论文阅读/写作扫盲
第一节:期刊科普 JCR分区和中科院分区是用于对期刊进行分类和评估的两种常见方法。它们的存在是为了帮助学术界和研究人员更好地了解期刊的学术质量、影响力和地位。 JCR分区(Journal Citation Reports):JCR分区是由Clarivate Ana…...
一文拿捏对象内存布局及JMM(JAVA内存模型)
1 JMM(Java Memory Model) 1 概述 Java内存模型(Java Memory Model简称JMM)是一种抽象的概念,并不真实存在,它描述的一组规则或者规范。通过这些规则、规范定义了程序中各个变量的访问方式。jvm运行的程序的实体是线程,而每个线程运行时&am…...
Android组件通信——ActivityGroup(二十五)
1. ActivityGroup 1.1 知识点 (1)了解ActivityGroup的作用; (2)使用ActivityGroup进行复杂标签菜单的实现; (3)使用PopupWindow组件实现弹出菜单组件开发; 1.2 具体…...
js的继承的方式
1.对象冒充继承 使用 bind,call,apply 解决构造函数属性的继承 缺点:不能继承原型上的属性和方法 //-------------父类-------------function Person(name, age, sex) {this.name name;this.age age;this.sex sex;}Person.prototype.run function () {console.log(我${this…...
聊聊HttpClient的重试机制
序 本文主要研究一下HttpClient的重试机制 HttpRequestRetryHandler org/apache/http/client/HttpRequestRetryHandler.java public interface HttpRequestRetryHandler {/*** Determines if a method should be retried after an IOException* occurs during execution.**…...
北邮22级信通院数电:Verilog-FPGA(4)第三周实验:按键消抖、呼吸灯、流水灯 操作流程注意事项
北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.注意事项 二.按键消抖 2.1 LED_deboun…...
Ghidra101再入门(上?)-Ghidra架构介绍
Ghidra101再入门(上?)-Ghidra架构介绍 最近有群友问我,说:“用了很多年的IDA,最近想看看Ghidra,这应该怎么进行入门?“这可难到我了。。 我发现,市面上虽然介绍Ghidra怎么用的文章和书籍很多&…...
Vue3路由引入报错解决:无法找到模块“xxx.vue”的声明文件 xxx隐式拥有 “any“ 类型。
这类情况应该遇见过吧,这是因为 TypeScript只能理解 .ts 文件,无法理解 .vue 文件。 解决方法:在项目的根目录或者src文件夹下创建一个后辍为 文件名.d.ts 的文件,并写入一下内容: declare module *.vue {import { …...
基于若依ruoyi-nbcio支持flowable流程分类里增加流程应用类型
更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 主要考虑到流程分很多种,普通的是OA流程,还有自定义业务流程,钉钉流程等…...
JS之同步异步promise、async、await
promise异步操作 Promise是异步编程的一种解决方案 JavaScript异步与同步解析 学习promise前我们先来了解下什么是异步? 基本概念: 消息队列中的任务分为宏任务与微任务;调用栈也可以称为主线程 首先我们要知道js是单线程语言,也就是说…...
【OpenCV • c++】自定义直方图 | 灰度直方图均衡 | 彩色直方图均衡
文章目录 一、什么是直方图二、自定义直方图三、灰度直方图均衡四、彩色直方图均衡一、什么是直方图 直方图广泛应用于很多计算机视觉处理当中。通过标记帧与帧之间显著的边缘和颜色的变化,可以检测视频中的场景变化。在每个兴趣点设置一个有相似特征的直方图所构成的“标签”…...
el-tree目录和el-table实现搜索定位高亮方法
需求:el-tree目录实现搜索查询el-table表格项,双击表格项根据yiZhuMLID||muLuID定位el-tree目录,并且高亮展示在可视化区域内,再重新根据el-tree目录的yiZhuMLID搜索刷新el-table表格,定位且高亮展示相对应的yiZhuMLID…...
linux常用指令
基础命令 cd:用于切换目录。例如,要从当前目录切换到/home/user目录,可以使用命令“cd /home/user”。ls:用于列出目录内容。例如,要列出当前目录的内容,可以使用命令“ls”。mkdir:用于创建目…...
C语言,指针的一些运算
若创建一个数组:int arr[10] 0; 用指针变量来储存数组首元素的地址:int* p arr,这里arr是数组名,表示首元素地址。 若p p 1或者p之后p本来指向数组首元素地址,就变成了指向第二个元素的地址,p n即指向第n 1个地…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
