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中使用Flask、MongoDB搭建简易图片服务器
Feb 04 Python
python使用pil生成图片验证码的方法
May 08 Python
Python基于pygame模块播放MP3的方法示例
Sep 30 Python
python调用外部程序的实操步骤
Mar 04 Python
Django 开发环境配置过程详解
Jul 18 Python
Python facenet进行人脸识别测试过程解析
Aug 16 Python
解决Python3下map函数的显示问题
Dec 04 Python
Pytorch Tensor基本数学运算详解
Dec 30 Python
基于torch.where和布尔索引的速度比较
Jan 02 Python
python 伯努利分布详解
Feb 25 Python
python爬虫开发之Beautiful Soup模块从安装到详细使用方法与实例
Mar 09 Python
python使用ctypes库调用DLL动态链接库
Oct 22 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
一些星际专用术语解释
2020/03/04 星际争霸
PHP垃圾回收机制简单说明
2010/07/22 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
PHP实现截取中文字符串不出现?号的解决方法
2016/12/29 PHP
jQuery中的常用事件总结
2009/12/27 Javascript
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
Jquery 插件开发笔记整理
2011/01/17 Javascript
firebug的一个有趣现象介绍
2011/11/30 Javascript
js获取和设置属性的方法
2014/02/20 Javascript
express的中间件cookieParser详解
2014/12/04 Javascript
JavaScript获得表单target属性的方法
2015/04/02 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
Python Web程序部署到Ubuntu服务器上的方法
2018/02/22 Python
Pandas 同元素多列去重的实例
2018/07/03 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
浅谈pytorch池化maxpool2D注意事项
2020/02/18 Python
html5 css3 动态气泡按钮实例演示
2012/12/02 HTML / CSS
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
奥林匹克运动会口号
2014/06/19 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
幼儿教师年度个人总结
2015/02/05 职场文书
2016年猴年新春致辞
2015/08/01 职场文书
预备党员入党感想
2015/08/10 职场文书
小学生优秀作文范文(六篇)
2019/07/10 职场文书
修辞手法有哪些?
2019/08/29 职场文书
Go语言中的UTF-8实现
2021/04/26 Golang
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js
详解CSS3浏览器兼容
2022/12/24 HTML / CSS