当前位置: 首页 > news >正文

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为例&#xff01; 力扣&#xff1a;LCR 122. 路径加密 题目&#xff1a; 代码&#xff1a; class Solution { public:string pathEncryption(string path) {for(int i0;i<path.size();i){if(path[i].){path[i] ;}}return path;} }; 难度升级&#xff08;原…...

cJson堆内存释放问题

cJSON_Delete()&#xff0c;是用来释放json对象的&#xff0c;释放父JSON对象后&#xff0c;子JSON对象也会被释放。 CJSON_free()&#xff0c;是用来释放其他对象的。 int main(void) {cJSON* cjson_test NULL;cJSON* cjson_address NULL;cJSON* cjson_skill NULL;char* s…...

论文阅读/写作扫盲

第一节&#xff1a;期刊科普 JCR分区和中科院分区是用于对期刊进行分类和评估的两种常见方法。它们的存在是为了帮助学术界和研究人员更好地了解期刊的学术质量、影响力和地位。 JCR分区&#xff08;Journal Citation Reports&#xff09;&#xff1a;JCR分区是由Clarivate Ana…...

一文拿捏对象内存布局及JMM(JAVA内存模型)

1 JMM(Java Memory Model) 1 概述 Java内存模型(Java Memory Model简称JMM)是一种抽象的概念&#xff0c;并不真实存在&#xff0c;它描述的一组规则或者规范。通过这些规则、规范定义了程序中各个变量的访问方式。jvm运行的程序的实体是线程&#xff0c;而每个线程运行时&am…...

Android组件通信——ActivityGroup(二十五)

1. ActivityGroup 1.1 知识点 &#xff08;1&#xff09;了解ActivityGroup的作用&#xff1b; &#xff08;2&#xff09;使用ActivityGroup进行复杂标签菜单的实现&#xff1b; &#xff08;3&#xff09;使用PopupWindow组件实现弹出菜单组件开发&#xff1b; 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信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章&#xff0c;请访问专栏&#xff1a; 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.注意事项 二.按键消抖 2.1 LED_deboun…...

Ghidra101再入门(上?)-Ghidra架构介绍

Ghidra101再入门(上&#xff1f;)-Ghidra架构介绍 最近有群友问我&#xff0c;说&#xff1a;“用了很多年的IDA&#xff0c;最近想看看Ghidra&#xff0c;这应该怎么进行入门&#xff1f;“这可难到我了。。 我发现&#xff0c;市面上虽然介绍Ghidra怎么用的文章和书籍很多&…...

Vue3路由引入报错解决:无法找到模块“xxx.vue”的声明文件 xxx隐式拥有 “any“ 类型。

这类情况应该遇见过吧&#xff0c;这是因为 TypeScript只能理解 .ts 文件&#xff0c;无法理解 .vue 文件。 解决方法&#xff1a;在项目的根目录或者src文件夹下创建一个后辍为 文件名.d.ts 的文件&#xff0c;并写入一下内容&#xff1a; declare module *.vue {import { …...

基于若依ruoyi-nbcio支持flowable流程分类里增加流程应用类型

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a;RuoYi-Nbcio后台管理系统 主要考虑到流程分很多种&#xff0c;普通的是OA流程&#xff0c;还有自定义业务流程&#xff0c;钉钉流程等…...

JS之同步异步promise、async、await

promise异步操作 Promise是异步编程的一种解决方案 JavaScript异步与同步解析 学习promise前我们先来了解下什么是异步&#xff1f; 基本概念&#xff1a; 消息队列中的任务分为宏任务与微任务;调用栈也可以称为主线程 首先我们要知道js是单线程语言&#xff0c;也就是说…...

【OpenCV • c++】自定义直方图 | 灰度直方图均衡 | 彩色直方图均衡

文章目录 一、什么是直方图二、自定义直方图三、灰度直方图均衡四、彩色直方图均衡一、什么是直方图 直方图广泛应用于很多计算机视觉处理当中。通过标记帧与帧之间显著的边缘和颜色的变化,可以检测视频中的场景变化。在每个兴趣点设置一个有相似特征的直方图所构成的“标签”…...

el-tree目录和el-table实现搜索定位高亮方法

需求&#xff1a;el-tree目录实现搜索查询el-table表格项&#xff0c;双击表格项根据yiZhuMLID||muLuID定位el-tree目录&#xff0c;并且高亮展示在可视化区域内&#xff0c;再重新根据el-tree目录的yiZhuMLID搜索刷新el-table表格&#xff0c;定位且高亮展示相对应的yiZhuMLID…...

linux常用指令

基础命令 cd&#xff1a;用于切换目录。例如&#xff0c;要从当前目录切换到/home/user目录&#xff0c;可以使用命令“cd /home/user”。ls&#xff1a;用于列出目录内容。例如&#xff0c;要列出当前目录的内容&#xff0c;可以使用命令“ls”。mkdir&#xff1a;用于创建目…...

C语言,指针的一些运算

若创建一个数组&#xff1a;int arr[10] 0; 用指针变量来储存数组首元素的地址&#xff1a;int* p arr,这里arr是数组名&#xff0c;表示首元素地址。 若p p 1或者p之后p本来指向数组首元素地址&#xff0c;就变成了指向第二个元素的地址&#xff0c;p n即指向第n 1个地…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...