python实现多进程按序号批量修改文件名的方法示例


Posted in Python onDecember 30, 2019

本文实例讲述了python实现多进程按序号批量修改文件名的方法。分享给大家供大家参考,具体如下:

说明

文件名命名方式如图,是数字序号开头,但是中间有些文件删掉了,序号不连续,这里将序号连续起来,总的文件量有40w+,故使用多进程

代码

import os
import re
from multiprocessing import Pool
def getAllFilePath(pathFolder,filter=[".jpg",".txt"]):
  #遍历文件夹下所有图片
  result=[]
  #maindir是当前搜索的目录 subdir是当前目录下的文件夹名 file是目录下文件名
  for maindir,subdir,file_name_list in os.walk(pathFolder):
    for filename in file_name_list:
      apath=os.path.join(maindir,filename)
      ext=os.path.splitext(apath)[1]#返回扩展名
      if ext in filter:
        result.append(apath)
  return result
def changName(filePath,changeNum):
  fileName=os.path.basename(filePath)
  dirName=os.path.dirname(filePath)
  pattern = re.compile(r'\d+')
  if len(pattern.findall(filePath))!=0:
    numInFileName=str(int(pattern.findall(fileName)[0])-changeNum)
    newFileName=pattern.sub(numInFileName,fileName)
    os.rename(filePath,os.path.join(dirName,newFileName))
    print('{1} is changed as {0}'.format(newFileName,fileName))
def changeNameByList(fileList,changNum):
  print('fileList len is:{}'.format(len(fileList)))
  for fileName in fileList:
    changName(fileName,changNum)
    print(fileName,' is done!')
if __name__ =='__main__':
  allFilePath=getAllFilePath(r'E:\Numberdata\4')
  n_total=len(allFilePath)
  n_process=8 #8线程
  #每段子列表长度
  length=float(n_total)/float(n_process)
  indices=[int(round(i*length)) for i in range(n_process+1)]
  sublists=[allFilePath[indices[i]:indices[i+1]] for i in range(n_process)]
  #生成进程池 
  p=Pool(n_process)
  for i in sublists:
    print("sublist len is {}".format(len(i)))
    p.apply_async(changeNameByList, args=(i,161130))
  p.close()
  p.join()

注意事项

  1. 多进程下python vscode终端debug不报错 注意可能潜在的bug
  2. os.rename()无法将文件命名成已经存在的文件,否则会报错

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
Selenium 模拟浏览器动态加载页面的实现方法
May 16 Python
python如何生成各种随机分布图
Aug 27 Python
在Pycharm terminal中字体大小设置的方法
Jan 16 Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 Python
python中bytes和str类型的区别
Oct 21 Python
解决Python logging模块无法正常输出日志的问题
Feb 21 Python
python 追踪except信息方式
Apr 25 Python
Python-jenkins 获取job构建信息方式
May 12 Python
python 数据库查询返回list或tuple实例
May 15 Python
python thrift 实现 单端口多服务的过程
Jun 08 Python
Python使用Chrome插件实现爬虫过程图解
Jun 09 Python
Pytorch Tensor基本数学运算详解
Dec 30 #Python
python垃圾回收机制(GC)原理解析
Dec 30 #Python
利用Python代码实现一键抠背景功能
Dec 29 #Python
如何利用pygame实现简单的五子棋游戏
Dec 29 #Python
Python使用正则实现计算字符串算式
Dec 29 #Python
Django框架教程之中间件MiddleWare浅析
Dec 29 #Python
三个python爬虫项目实例代码
Dec 28 #Python
You might like
php基础知识:函数基础知识
2006/12/13 PHP
PHP实时显示输出
2008/10/02 PHP
PHP多态代码实例
2015/06/26 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
JavaScript中的this关键字使用详解
2015/08/14 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
微信小程序商品到详情的实现
2017/06/27 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
解决Vue2.0 watch对象属性变化监听不到的问题
2018/09/11 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
vue-router结合vuex实现用户权限控制功能
2019/11/14 Javascript
vue 数据操作相关总结
2020/12/17 Vue.js
[43:18]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
python基础教程之五种数据类型详解
2017/01/12 Python
Python实现树莓派WiFi断线自动重连的实例代码
2017/03/16 Python
Python上下文管理器和with块详解
2017/09/09 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
python 的 scapy库,实现网卡收发包的例子
2019/07/23 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
python numpy库linspace相同间隔采样的实现
2020/02/25 Python
python属于软件吗
2020/06/18 Python
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
马来西亚户外装备商店:PTT Outdoor
2019/07/13 全球购物
高一数学教学反思
2014/02/07 职场文书
电厂职工自我鉴定
2014/02/20 职场文书
哈弗商学院毕业生求职信
2014/02/26 职场文书
禁烟标语大全
2014/06/11 职场文书
行政申诉状范文
2015/05/20 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书