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 相关文章推荐
在Python程序中操作MySQL的基本方法
Jul 29 Python
python通过tcp发送xml报文的方法
Dec 28 Python
详解Python下载图片并保存本地的两种方式
May 15 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
Oct 10 Python
Python中顺序表原理与实现方法详解
Dec 03 Python
Python greenlet和gevent使用代码示例解析
Apr 01 Python
详解Python中的编码问题(encoding与decode、str与bytes)
Sep 30 Python
python 决策树算法的实现
Oct 09 Python
Python提取视频中图片的示例(按帧、按秒)
Oct 22 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 27 Python
windows安装python超详细图文教程
May 21 Python
Python并发编程实例教程之线程的玩法
Jun 20 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
如何开发一个虚拟域名系统
2006/10/09 PHP
把1316这个数表示成两个数的和,其中一个为13的倍数,另一个是11的倍数,求这两个数。
2011/06/24 PHP
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
JavaScript 不只是脚本
2007/05/30 Javascript
javascript new一个对象的实质
2010/01/07 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
从重置input file标签中看jQuery的 .val() 和 .attr(“value”) 区别
2016/06/12 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2014/04/15 Python
python中的内置函数getattr()介绍及示例
2014/07/20 Python
Python os模块中的isfile()和isdir()函数均返回false问题解决方法
2015/02/04 Python
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
Python中函数参数设置及使用的学习笔记
2016/05/03 Python
python 循环遍历字典元素的简单方法
2016/09/11 Python
Python实现压缩和解压缩ZIP文件的方法分析
2017/09/28 Python
Python输出各行命令详解
2018/02/01 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
使用pycharm生成代码模板的实例
2018/05/23 Python
基于python进行桶排序与基数排序的总结
2018/05/29 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
经管应届生求职信
2013/11/17 职场文书
室内设计专业学生的自我评价分享
2013/11/27 职场文书
篮球社团活动总结
2014/06/27 职场文书
2014广电局实施党的群众路线教育实践活动方案思想汇报
2014/09/22 职场文书
画展观后感
2015/06/17 职场文书
战友聚会致辞
2015/07/28 职场文书
高三语文教学反思
2016/02/16 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书