Python - 批量文件重命名

2023-11-09

 

两个目标两个:

1. 输入一组文件名,进行批量重命名;

2. 输入一组目录名,批量重命名各个目录下的文件。

附加功能:

1. 可根据文件的创建日期对文件重新排序;

2. 重命名方式为递增数列,可带前后缀;

3. 可以指定输出目录,如果不指定输出目录,则在原文件夹中重命名,默认为在原文件夹中进行重命名;

4. 可指定在重命名后删除原文件(只有输出目录不同时有效),默认为不删除。

代码:

 
  
import os

# 获取目录下的子目录
def subdirs(path):
dl
= [];
for i in os.walk(path, False):
for d in i[ 1 ]:
dl.append(os.path.join(path, d))
return dl

# 获取目录下的子文件
def subfiles(path):
fl
= [];
for i in os.walk(path, False):
for f in i[ 2 ]:
fl.append(os.path.join(path, f))
return fl

# 根据文件创建时间对文件进行排序
def fsort(files):
files.sort(key
= lambda s: os.path.getctime(s))
return files

# 递增数列生成器
class gen:
def __init__ (self, prefix = '' , suffix = '' , seed = 1 , digit = 3 ):
self.prefix
= prefix
self.suffix
= suffix
self.seed
= seed
self.digit
= digit
self.it
= seed - 1

def gennext(self):
self.it
+= 1
return ' {0}{1:0{3}d}{2} ' .format(self.prefix, self.it, self.suffix, self.digit)

def copy(self):
return gen(self.prefix, self.suffix, self.seed, self.digit)

class renamer:
def __init__ (self, files, ngen = None, delsrc = False, output = '' ):
self.it
= 0
self.total
= 0
self.files
= files
self.delsrc
= delsrc
self.target
= output
if (ngen is None): self.namegen = gen()
elif (isinstance(ngen, gen)): self.namegen = ngen
else : raise (TypeError, ' ngen参数只接受gen类型的对象 ' )

def rename(src, des, delsrc):
os.rename(src, des)
if (delsrc == True):
os.remove(src)

def run(self):
self.it
= 0
self.total
= len(self.files)
for f in self.files:
dn
= os.path.dirname(f)
ex
= os.path.splitext(f)
nn
= self.namegen.gennext() + ex[ 1 ]
np
= ''
sd
= self.target == ''
if (sd):
np
= os.path.join(dn, nn)
else :
np
= os.path.join(self.target, nn)
print ( ' rename: %s ' % (np))
renamer.rename(f, np, sd
and self.delsrc)
self.it
+= 1
print ( ' %d work(s) done ' % (self.it))
print ()

# 重命名给定列表中的所有文件
def fs_rename(files, resort = False, ngen = gen(), delsrc = False, output = '' ):
if (resort): fsort(files)
rn
= renamer(files, ngen.copy(), delsrc, output)
rn.run()

# 重命名给定目录中的所有文件
def ds_rename(dirs, resort = False, ngen = gen(), delsrc = False, output = '' ):
for d in dirs:
fs
= subfiles(d)
if (resort): fsort(fs)
print ( ' %d file(s) in %s ' % (len(fs), d))
if (output == '' ) ngen = ngen.copy()
rn
= renamer(fs, ngen, delsrc, output)
rn.run()

说明

fs_rename方法对一组文件进行批量重命名。

 

参数说明:

files: 文件列表;

resort: 是否重新排列文件(按创文件建时间),默认为False;

ngen: 一个gen类型的对象,用于产生文件名;

delsrc: 是否删除原文件,默认为False;

output: 输出路径,默认为'',表示在原文件家中重命名。

 

 

ds_rename方法对一组目录中的文件进行批量重命名。

参数说明:

dirs: 目录列表;

resort: 是否重新排列文件(按创文件建时间),默认为False;

ngen: 一个gen类型的对象,用于产生文件名;

delsrc: 是否删除原文件,默认为False;

output: 输出路径,默认为'',表示在原文件家中重命名。

 

gen类型构造函数创建数列发生器。

参数说明:

prefix: 前缀字符串;

suffix: 后缀字符串;

seed: 起始数;

digit: 数为宽,不够用0补齐。

 

subdirs方法获取一个目录下的子目录,并返回完整路径。

 

subfiles方法获取一个目录下的所有文件,并返回完整路径。

 

fsort方法对一组文件根据其创建时间进行重新排序。

 

转载于:https://www.cnblogs.com/tracydj/archive/2011/01/27/1945861.html

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

Python - 批量文件重命名 的相关文章

  • 如何计算 pandas datetime 对象的均值和方差?

    如何计算 YYYY MM DD 形式的 python 日期时间对象的汇总统计数据 均值和标准差 我想对具有不同 ID 的不同日期时间对象组执行此操作 数据如下 import datetime as dt df pd DataFrame Da
  • 使用 MongoDB 作为我们的主数据库,我应该使用单独的图数据库来实现实体之间的关系吗?

    我们目前正在为一家专业公司内部实施类似 CRM 的解决方案 由于存储信息的性质以及信息的不同值和键 我们决定使用文档存储数据库 因为它完全适合目的 在本例中我们选择 MongoDB 作为此 CRM 解决方案的一部分 我们希望存储实体之间的关
  • Pandas set_levels,如何避免标签排序?

    我使用时遇到问题set levels多索引 from io import StringIO txt Name Height Age Metres A 1 25 B 95 1 df pd read csv StringIO txt heade
  • 让 VoiceChannel.members 和 Guild.members 返回完整列表的问题

    每当我尝试使用 VoiceChannel members 或 Guild members 时 它都不会提供适用成员的完整列表 我从文本命令的上下文中获取 VoiceChannel 和 Guild 如下所示 bot command name
  • 计算另一个字符串中多个字符串的出现次数

    在 Python 2 7 中 给定以下字符串 Spot是一只棕色的狗 斑点有棕色的头发 斑点的头发是棕色的 查找字符串中 Spot brown 和 hair 总数的最佳方法是什么 在示例中 它将返回 8 我正在寻找类似的东西string c
  • 多输出堆叠回归器

    一次性问题 我正在尝试构建一个多输入堆叠回归器 添加到 sklearn 0 22 据我了解 我必须结合StackingRegressor and MultiOutputRegressor 经过多次尝试 这似乎是正确的顺序 import nu
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • PyQt 使用 ctrl+Enter 触发按钮

    我正在尝试在我的应用程序中触发 确定 按钮 我当前尝试的代码是这样的 self okPushButton setShortcut ctrl Enter 然而 它不起作用 这是有道理的 我尝试查找一些按键序列here http ftp ics
  • 打印数字时添加千位分隔符[重复]

    这个问题在这里已经有答案了 我真的不知道这个问题的 名称 所以它可能是一个不正确的标题 但问题很简单 如果我有一个数字 例如 number 23543 second 68471243 我想要它使print 像这样 23 54368 471
  • Python 内置的 super() 是否违反了 DRY?

    显然这是有原因的 但我没有足够的经验来认识到这一点 这是Python中给出的例子docs http docs python org 2 library functions html super class C B def method se
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • 为什么 csv.DictReader 给我一个无属性错误?

    我的 CSV 文件是 200 Service 我放入解释器的代码是 snav csv DictReader open screennavigation csv delimiter print snav fieldnames 200 for
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • pandas.read_csv 将列名移动一倍

    我正在使用位于的 ALL zip 文件here http www fec gov disclosurep PDownload do 我的目标是用它创建一个 pandas DataFrame 但是 如果我跑 data pd read csv
  • 如何将Python3设置为Mac上的默认Python版本?

    有没有办法将 Python 3 8 3 设置为 macOS Catalina 版本 10 15 2 上的默认 Python 版本 我已经完成的步骤 看看它安装在哪里 ls l usr local bin python 我得到的输出是这样的
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS

随机推荐

  • 穷举数组所有子集

    最终子序列的个数 Math pow 2 n 因为每个位置都有显示或者不显示两种可能 一共n个位置 所以是2的n次方 例如数组 a b c 每一个子序列都可以看成是数组中每个位置是否显示 1 显示 0 不显示 那么我们可以想到有一下组合 0
  • sqli-labs第八关(布尔盲注)

    第八关看标题可知此关可以使用布尔盲注 布尔盲注我的理解是页面不会回显错误 但是注入等式或不等式时通过页面的反应能判断出注入中算式的true或false 布尔盲注的步骤如下 获取数据库长度 获取数据库名 获取数据库表 获取表中字段 获取表中数
  • React-Hooks源码深度解读

    useState 解析 useState 使用 通常我们这样来使用 useState 方法 function App const num setNum useState 0 const add gt setNum num 1 return
  • RobotFramework环境配置二十五:屏幕截图问题(滚动屏幕)

    屏幕截图问题 滚动屏幕 目的 Selenium2Library 屏幕截图无法保存全屏 需要让屏幕滚动到目标元素的位置 实现 Execute Javascript 一 用例 选卡中心选择课程测试 登录 进入 选卡中心 选择课程 检测元素 期望
  • Python+selenium+PIL实现网页自动截图

    欢迎来到Python办公自动化专栏 Python处理办公问题 解放您的双手 博客主页 一晌小贪欢的博客主页 该系列文章专栏 Python办公自动化专栏 文章作者技术和水平有限 如果文中出现错误 希望大家能指正 欢迎各位佬关注 背景 最近接到
  • 【Matlab优化预测】鲸鱼算法优化SVM预测【含源码 1377期】

    一 代码运行视频 哔哩哔哩 Matlab优化预测 鲸鱼算法优化SVM预测 含源码 1377期 二 matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 1 刘沛津 胡冀飞 贺宁 曹进 徐军昶 改进鲸鱼算法优化LSSVM
  • Android中WebView简介

    1 WebView简介 WebView在Android平台上是一个特殊的View 基于webkit引擎 展示web页面的控件 app中显示的是一张网页 提供了网页的前进 后退 放大 缩小 搜索 WebView在低版本和高版本分别采用不同的
  • 探索短视频小程序/小年糕

    短视频小程序的兴起 为创作者提供了一个全新的平台 让他们能够以更专业的方式展现自己的作品 这种创作形式不仅要求作品内容足够精彩还需要有深度的思考和逻辑性的呈现 本文将探索短视频小程序的专业与深度的创作之道 帮助创作者更好地发挥自己的才华 一
  • Angular 表单状态及校验

    在angular框架中 表单状态的含义 valid 校验成功 invalid 校验失败 pending 表单正在提交过程中 pristine 数据依然处于原始状态 字段没有被修改过 dirty 数据已经变脏了 被用户修改过了 touched
  • 【 C++ 】map、multimap的介绍和使用

    目录 1 map map的介绍 map的定义 insert插入函数 map的迭代器 运算符重载 find查找函数 erase删除函数 其它函数 总结 2 multimap multimap的介绍 multimap的使用 1 map map的
  • Arduino基础篇(五)-- 如何快速上手串口通信(Serial)

    文章目录 1 基础篇 1 1 通信基础 2 串口通信 2 1 Arduino串口的硬件结构 2 2 串口工作原理 2 3 硬件串口通信 2 4 软件模拟串口通信 1 基础篇 1 1 通信基础 1 并行通信 通过输入 输出端口在 Arduin
  • C#学习笔记 异步操作

    同步操作 默认情况下我们的代码都是同步操作 这种情况下 所有的操作都在同一个线程中 如果遇到需要长时间执行的操作或者是一个IO操作 那么代码可能会阻塞比较长的时间 在阻塞的这段时间里 无法进行其他工作 这是很不好的 这里是一个同步操作的例子
  • ML Introduction

    Task of ML Supervised Learning Classification and regression Unsepervised Learning Clustering Density Estimation Reducti
  • 【数据分析】基于时间序列的预测方法

    时间序列预测 目录 时间序列预测 1 时间序列介绍 2 原始数据集 3 导入数据 4 检测时间序列的平稳性 5 如何使时间序列平稳 5 1 估计和消除趋势 5 1 1 对数转换 5 1 2 移动平均 5 2 消除趋势和季节性 5 2 1 差
  • 利用yoloV3模型进行训练和预测

    学习目标 熟悉TFRecord文件的使用方法 知道YoloV3模型结构及构建方法 知道数据处理方法 能够利用yoloV3模型进行训练和预测 1 TFrecord文件 该案例中我们依然使用VOC数据集来进行目标检测 不同的是我们要利用tfre
  • PAT (Advanced Level) Practice 题目集合(1001 ~ 1050)(正在更新)

    1001 A B Format 20 分 题目大意 计算a b 结果按照西方的那种写数字的方式输出 从三个数一个逗号那种 include
  • 【设计模式】 模板方法模式介绍及C代码实现

    设计模式 模板方法模式介绍及C代码实现 背景 在软件构建过程中 对于某一项任务 它常常有稳定的整体操作结构 但各个子步骤却有很多改变的需求 或者由于固有的原因 比如框架与应用之间的关系 而无法和任务的整体结构同时实现 比如你要从北京去上海出
  • 报错:IOException parsing XML document from class path resource [springmvc.xml]; nested exception is...

    练习的时候发现的报错 报错如图 原因 resouces下的xml文件无法编译到target classes下 即xml文件不在src下 解决方法 将XML拖至src下即可 报错就没有叻
  • nginx一些常用命令

    nginx一些常用命令 下面这些操作均基于自己电脑所做 nginx安装在自己的ubuntu操作系统中 目录为 home chenglin nginx 1 0 11 1 启动nginx 2 查看nginx进程 其中 master为主进程 wo
  • Python - 批量文件重命名

    两个目标两个 1 输入一组文件名 进行批量重命名 2 输入一组目录名 批量重命名各个目录下的文件 附加功能 1 可根据文件的创建日期对文件重新排序 2 重命名方式为递增数列 可带前后缀 3 可以指定输出目录 如果不指定输出目录 则在原文件夹