python实用脚本(一)—— 批量修改目标文件夹下的文件名

2023-10-30

本期主题:
python重命名文件脚本,批量修改某一文件夹下的后缀名



1.代码

#!/usr/bin/python3
# -*- coding:utf-8 -*-
# 批量修改文件扩展名

import argparse
import os

def batch_rename(work_dir, old_ext, new_ext):
    for filename in os.listdir(work_dir):
        print(filename)
        splite_file = os.path.splitext(filename)
        root_name, file_ext = splite_file
        # root_name = "hello"
        # print(root_name, file_ext)
        if old_ext == file_ext:
            # print("root_name is ", root_name)
            newfile = root_name + new_ext
            # print(newfile)
            # os.path.join(path1, path2) 是将path1和path2拼接在一起
            os.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="use to change name in a directory"
    )
    parser.add_argument(
        "work_dir",
        metavar="WORK_DIR",
        type=str,
        nargs=1,
        help="the work dir",
    )
    parser.add_argument(
        "old_ext",
        metavar="OLD_EXT",
        type=str,
        nargs=1,
        help="old ext name",
    )
    parser.add_argument(
        "new_ext",
        metavar="NEW_EXT",
        type=str,
        nargs=1,
        help="new ext name",
    )
    return parser

def main():
    # parser = argparse.ArgumentParser()
    parser = get_parser()
    args = vars(parser.parse_args()) # vars()将args转成字典形式
    # print(type(args), type(args["work_dir"])) type分别是dict和list

    work_dir = args["work_dir"][0]
    # print(type(work_dir), work_dir)

    old_ext = args["old_ext"][0]
    if old_ext and old_ext[0] != ".":
        old_ext = "." + old_ext
    # print(type(old_ext), old_ext)

    new_ext = args["new_ext"][0]
    if new_ext and new_ext[0] != ".":
        new_ext = "." + new_ext

    batch_rename(work_dir, old_ext, new_ext)

if __name__ == "__main__":
    main()

2.使用

//运行时提示:
jason@ubuntu:~/WorkSpace/5.Python/0.batch_rename$ python3 batch_rename.py -h
usage: batch_rename.py [-h] WORK_DIR OLD_EXT NEW_EXT

use to change name in a directory

positional arguments:
  WORK_DIR    the work dir
  OLD_EXT     old ext name
  NEW_EXT     new ext name

optional arguments:
  -h, --help  show this help message and exit

work_dir是工作目录
old_ext是旧的扩展名
new_ext是需要转换的新的扩展名

在rename_dir目录下有3个文件

jason@ubuntu:~/WorkSpace/5.Python/0.batch_rename$ ls rename_dir/
a.tmp b.tmp c.tmp
jason@ubuntu:~/WorkSpace/5.Python/0.batch_rename$ python3 batch_rename.py ./rename_dir .tmp .txt
c.tmp
b.tmp
a.tmp
rename is done!
[‘c.txt’, ‘a.txt’, ‘b.txt’]

3.简单解析

argparse实际上是python标准库中的命令行解析模块。
参考我们使用的ls命令

  • ls即使在运行时没提供任何选项,默认会输出当前文件夹包含的文件和文件夹;
  • ls xxx,其中的这个xxx代表是位置参数
  • ls -l,这个-l是可选参数

我们上面的例子中,python脚本后面就是跟的三个位置参数,关于argparse的详细解释,参考官方教程:
Argparse 教程

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python实用脚本(一)—— 批量修改目标文件夹下的文件名 的相关文章

  • 如何使用 Python 3 绕过 HTTP Error 403: Forbidden with urllib.request

    您好 不是每次都这样 但有时在尝试访问 LSE 代码时 我会收到每一个烦人的 HTTP 错误 403 禁止消息 任何人都知道我如何仅使用标准 python 模块来克服这个问题 遗憾的是没有漂亮的汤 import urllib request
  • Virtualenv 在 OS X Yosemite 上失败并出现 OSError

    我最近更新到 OSX Yosemite 现在无法使用virtualenv pip 每当我执行 virtualenv env 它抛出一个 OSError Command Users administrator ux env bin pytho
  • 在python中将数据库表写入文件的最快方法

    我正在尝试从数据库中提取大量数据并将其写入 csv 文件 我正在尝试找出最快的方法来做到这一点 我发现在 fetchall 的结果上运行 writerows 比下面的代码慢 40 with open filename a as f writ
  • 将 numpy 数组合并为单个 int

    numpy 数组怎么可以这样 10 22 37 45 转换为单个 int32 数字 如下所示 10223745 这可以工作 gt gt gt int join map str 10 22 37 45 10223745 基本上你使用map s
  • 如何返回 cost, grad 作为 scipy 的 fmin_cg 函数的元组

    我怎样才能使 scipy 的fmin cg使用一个返回的函数cost and gradient作为元组 问题是有f对于成本和fprime对于梯度 我可能必须执行两次操作 非常昂贵 grad and cost被计算 此外 在它们之间共享变量可
  • 从 Azure ML 实验中访问 Azure Blob 存储

    Azure ML 实验提供了通过以下方式读取 CSV 文件并将其写入 Azure Blob 存储的方法 Reader and Writer模块 但是 我需要将 JSON 文件写入 blob 存储 由于没有模块可以执行此操作 因此我尝试在Ex
  • Matplotlib:如何有效地将大量线段着色为独立渐变

    Python 绘图库 如何有效地将大量线段着色为独立渐变 已经 阅读this https stackoverflow com questions 8500700 how to plot a gradient color line in ma
  • 创建上下文后将 jar 文件添加到 pyspark

    我正在笔记本上使用 pyspark 并且不处理 SparkSession 的创建 我需要加载一个包含一些我想在处理 rdd 时使用的函数的 jar 您可以使用 jars 轻松完成此操作 但在我的特定情况下我无法做到这一点 有没有办法访问sp
  • 使用 Paramiko 进行 DSA 密钥转发?

    我正在使用 Paramiko 在远程服务器上执行 bash 脚本 在其中一些脚本中 存在与其他服务器的 ssh 连接 如果我只使用 bash 不使用 Python 我的 DSA 密钥将被第一个远程服务器上的 bash 脚本转发并使用 以连接
  • python 中的 <> 运算符有什么作用?

    我刚刚遇到这个here http www feedparser org feedparser py 总是这样使用 if string1 find string2 lt gt 1 pass 什么是 lt gt 运算符这样做 为什么不使用通常的
  • 根据其他单元格值更改多个单元格值

    我想更改包含的单元格moving to movingToOpenor movingToClose基于下一个单元格中给出的状态 有时循环会被中断并且不会从open to close or close to open 这是我当前的数据框 Dat
  • python中basestring和types.StringType之间的区别?

    有什么区别 isinstance foo types StringType and isinstance foo basestring 对于Python2 basestring是两者的基类str and unicode while type
  • 查找 Pandas DF 行中的最短日期并创建新列

    我有一个包含多个日期的表 有些日期将为 NaN 我需要找到最旧的日期 所以一行可能有 DATE MODIFIED WITHDRAWN DATE SOLD DATE STATUS DATE 等 因此 对于每一行 一个或多个字段中都会有一个日期
  • 可以使用哪些技术来衡量 pandas/numpy 解决方案的性能

    Question 如何简洁全面地衡量下面各个功能的性能 Example 考虑数据框df df pd DataFrame Group list QLCKPXNLNTIXAWYMWACA Value 29 52 71 51 45 76 68 6
  • 如何指示 urwid 列表框的项目数多于当前显示的项目数?

    有没有办法向用户显示 urwid 列表框在显示部分上方 下方有其他项目 我正在考虑类似滚动条的东西 它可以显示条目的数量 或者列表框顶部 底部的单独栏 如果这个行为无法实现 有哪些方法可以实现这个通知 在我的研究过程中 我发现这个问题 ht
  • 使用 PIL 在 Tkinter 中显示动画 GIF

    我正在尝试制作一个程序来使用 Tkinter 显示动画 GIF 这是我最初使用的代码 from future import division Just because division doesn t work right in 2 7 4
  • Django 管理器链接

    我想知道是否有可能 如果可以的话 如何 将多个管理器链接在一起以生成受两个单独管理器影响的查询集 我将解释我正在研究的具体示例 我有多个抽象模型类 用于为其他模型提供小型的特定功能 其中两个模型是DeleteMixin 和GlobalMix
  • 如何获取pandas中groupby对象中的组数?

    我想知道有多少个独特的组需要执行计算 给定一个名为 groupby 的对象dfgroup 我们如何找到组的数量 简单 快速 Pandaic ngroups 较新版本的 groupby API pandas gt 0 23 提供了此 未记录的
  • 用于插入或替换 URL 参数的 Django 模板标签

    有人知道 Django 模板标签可以获取当前路径和查询字符串并插入或替换查询字符串值吗 例如向 some custom path q how now brown cow page 3 filter person 发出请求 电话 urlpar
  • 定义在文本小部件中双击时选择哪些字符

    在 Windows 上 双击文本小部件中的单词也将选择连接的标点符号 有什么方法可以定义您想要选择的角色吗 tcl wordchars该变量的值是一个正则表达式 可以设置它来控制什么被视为 单词 字符 例如 通过双击 Tk 中的文本来选择单

随机推荐

  • 山石岩读丨前沿领域探析——汽车CAN总线协议详解及攻击面分析

    1 CAN总线的基本概念以及由来 CAN Controller Area Network 总线协议是由 BOSCH 发明的一种基于消息广播模式的串行通信总线 它起初用于实现汽车内ECU之间可靠的通信 后因其简单实用可靠等特点 而广泛应用于工
  • 解读HashMap中put方法的源码

    解析hashMap的put方法是如何存储一个键值 一 put方法 代码1 1 V put K key V value 方法 public V put K key V value return putVal hash key key valu
  • Java 面向对象之多态

    目录 1 接口 1 1 接口中成员的访问特点 1 2 默认方法 1 3 静态方法 1 4 私有方法 1 5 小结 2 多态 2 1 多态中成员的访问特点 2 2 多态的好处和弊端 2 3 多态中的转型 3 内部类 3 1 成员内部类 3 2
  • SpringBoot框架总结

    SpringBoot框架总结 一 SpringBoot框架的概念 1 传统框架的弊端 例如传统的SSM框架整合了MyBatis Spring SpringMVC框架 但其需要繁琐且重复的配置使程序员很是痛苦 2 SpringBoot框架 S
  • ros中编译release版本

    catkin build cmake args DCMAKE BUILD TYPE Release
  • Java做一个进制转换小工具

    通过swing和awt实现的一个简单的进制转换工具 可以进行数之间的进制转换 只有两个类 所有代码都放在https github com 13337356453 BHD Converter 可自行下载 因为某些特殊的原因 没有把窗口弄得更漂
  • Selenium中的断言(python篇)

    Selenium常用的断言包括 页面属性断言 断言标题 url或页面源码中是否包含或不包含特定字符 元素存在断言 断言指定元素存在 图片及链接断言 断言图片正常显示 链接可以正常打开 页面属性断言 这是最常用的断言方式 可以用来断言页面是否
  • 李开复创业--创新工场未来的前景是怎样?

    创新工场现在是房子不小 人不多 这个星期我们招聘了第七个人 节目还没开始 李开复对本报道如是说 十一 长假 他赶赴美国与投资商谈融资 同时不忘到两所知名高校演讲招揽人才 现在 刚刚满月的 创新工场 未来的前景是怎样 招聘人才一个月 招揽人才
  • 面试题10道02 2021.11.26

    1 什么是HTTP报文 Http报文就是客户端和服务端之间传送的数据块 2 HTTP报文由哪三部分组成 HTTP报文由起始行 头部 主体组成 其中起始行是对该报文进行的描述 头部是对报文的属性进行的描述 主体则是数据的内容 3 HTTP报文
  • Movidius神经计算棒5-编译ncsdk

    上面是我的微信和QQ群 欢迎新朋友的加入 这里有个小提示 先把硬件接上电脑 否则会编译报错 然后最好不要用USB HUB线 make install 完成之后如下所示 make examples 完成之后是这样的 测试
  • 希尔排序详解

    1 概述 希尔排序 Shell s Sort 是插入排序的一种又称 缩小增量排序 Diminishing Increment Sort 是直接插入排序算法的一种更高效的改进版本 希尔排序是非稳定排序算法 该方法因 D L Shell 于 1
  • scrapy中关于Splash的使用

    为什么要学习Splash 我们经常使用scrapy框架编写爬虫代码 站在巨人的肩膀上感觉很好 但是一旦遇到网站用JavaScript动态渲染 scrapy就显得有些力不从心了 我们了解的selenium可以完成动态加载 返回浏览器渲染后的页
  • python字符串长度输出_python输出指定长度的字符串

    import io import sys import random import string def generate random str randomlength 16 生成一个指定长度的随机字符串 其中 string digits
  • 基本数据类型对象包装类

    基本数据类型对象包装类 为了方便操作基本数据类型值 将其封装成了对象 在对象中定义了属性和行为丰富了该数据的操作 用于描述该对象的类就称为基本数据类型包装类 byte Byte short Short int Integer long Lo
  • IDEA自带plantUML绘制时序图

    一 时序图的作用 时序图 Sequence Diagram 又名序列图 循序图 是一种UML交互图 它通过描述对象之间发送消息的时间顺序显示多个对象之间的动态协作 它可以表示用例的行为顺序 当执行一个用例行为时 其中的每条消息对应一个类操作
  • Unix环境高级编程环境搭建

    在网上下载书中源代码 点此连接 点击打开链接 解压文件按 cd apue 3e make 在 make 的这个过程中一般会出错 后面显示 can t find lbsd 解决办法是添加 libbsd a 的静态链接库 指令如下 ub系统 s
  • echarts x轴 type=‘time‘

    关于x轴的设置在开发中是很常见的操作 如果只是设置一些定死的数据 那么就很简单 但是如果要设置某个可变的 且数量很多的x轴的话 不是一件很简单的事情了 比如我最近在工作中就遇到了 下面来和大家一起分享一下 开发需求如下 一个折线图表 默认显
  • 团队工具

    worktile Teambition 今目标 钉钉
  • 【机器学习】- 支持向量机

    预备知识 1 法向量 Wx b 0 w是什么 Wx b 0是直线方程 其中w表示法向量 法向量的指向由具体值确定 例如x y 2 0 法向量为 1 1 指向右上方 2 距离公式 3 函数间隔 当w确定的时候 距离的远近可以比较分子 也就是说
  • python实用脚本(一)—— 批量修改目标文件夹下的文件名

    本期主题 python重命名文件脚本 批量修改某一文件夹下的后缀名 脚本 1 代码 2 使用 3 简单解析 1 代码 usr bin python3 coding utf 8 批量修改文件扩展名 import argparse import