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中的默认参数详解
Jun 24 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
python中matplotlib的颜色及线条控制的示例
Mar 16 Python
用python简单实现mysql数据同步到ElasticSearch的教程
May 30 Python
Python Web编程之WSGI协议简介
Jul 18 Python
python3利用Axes3D库画3D模型图
Mar 25 Python
Java多线程实现四种方式原理详解
Jun 02 Python
python接入支付宝的实例操作
Jul 20 Python
python的launcher用法知识点总结
Aug 07 Python
python解决12306登录验证码的实现
Apr 18 Python
python 自动刷新网页的两种方法
Apr 20 Python
Python实现老照片修复之上色小技巧
Oct 16 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错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
2014/07/28 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
Yii框架getter与setter方法功能与用法分析
2019/10/22 PHP
JS的数组的扩展实例代码
2008/07/09 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
2010/03/07 Javascript
跨浏览器的 mouseenter mouseleave 以及 compareDocumentPosition的使用说明
2010/05/04 Javascript
手机平板等移动端适配跳转URL的js代码
2014/01/25 Javascript
DIV始终居中的js代码
2014/02/17 Javascript
EasyUI实现二级页面的内容勾选的方法
2015/03/01 Javascript
完美兼容多浏览器的js判断图片路径代码汇总
2015/04/17 Javascript
js实现完美兼容各大浏览器的人民币大小写相互转换
2015/10/29 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
通俗易懂地解释JS中的闭包
2017/10/23 Javascript
Angular Renderer (渲染器)的具体使用
2018/05/03 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
使用nvm和nrm优化node.js工作流的方法
2019/01/17 Javascript
vue+openlayers绘制省市边界线
2020/12/24 Vue.js
聊聊vue 中的v-on参数问题
2021/01/29 Vue.js
Python中read()、readline()和readlines()三者间的区别和用法
2017/07/30 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
python next()和iter()函数原理解析
2020/02/07 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
雷锋精神演讲稿
2014/05/13 职场文书
财务管理专业求职信
2014/06/11 职场文书
食品安全演讲稿
2014/09/01 职场文书
研究生导师评语
2014/12/31 职场文书
赡养老人协议书范本
2015/08/06 职场文书
人事行政部各岗位职责说明书!
2019/07/15 职场文书
56句经典英文座右铭
2019/08/09 职场文书
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA