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框架与数据库连接的教程
Apr 20 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
浅谈flask中的before_request与after_request
Jan 20 Python
Zookeeper接口kazoo实例解析
Jan 22 Python
Python实现按中文排序的方法示例
Apr 25 Python
python爬取个性签名的方法
Jun 17 Python
Python中作用域的深入讲解
Dec 10 Python
对dataframe数据之间求补集的实例详解
Jan 30 Python
Python实现基于socket的udp传输与接收功能详解
Nov 15 Python
Python调用.NET库的方法步骤
Dec 27 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
Jun 30 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
Nov 25 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
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
2017/06/09 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
jqPlot Option配置对象详解
2009/07/25 Javascript
基于mootools 1.3框架下的图片滑动效果代码
2011/04/22 Javascript
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
js获取input标签的输入值实现代码
2013/08/05 Javascript
前端轻量级MVC框架CanJS详解
2014/09/26 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
使用Function.apply()的参数数组化来提高 JavaScript程序性能的技巧
2015/12/23 Javascript
JavaScript对Json的增删改属性详解
2016/06/02 Javascript
javascript 中关于array的常用方法详解
2017/05/05 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
解决vue项目axios每次请求session不一致的问题
2020/10/24 Javascript
python中列表元素连接方法join用法实例
2015/04/07 Python
Python中使用strip()方法删除字符串中空格的教程
2015/05/20 Python
Python中使用插入排序算法的简单分析与代码示例
2016/05/04 Python
基于Django的python验证码(实例讲解)
2017/10/23 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
django组合搜索实现过程详解(附代码)
2019/08/06 Python
使用sklearn的cross_val_score进行交叉验证实例
2020/02/28 Python
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
C#基础面试题
2016/10/17 面试题
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
师范学院美术系毕业生自我鉴定
2014/01/29 职场文书
医学专业职业生涯规划范文
2014/02/05 职场文书
绿化工程实施方案
2014/03/17 职场文书
交通事故调解协议书
2015/05/20 职场文书
士兵突击观后感
2015/06/16 职场文书
python opencv人脸识别考勤系统的完整源码
2021/04/26 Python
python使用glob检索文件的操作
2021/05/20 Python
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
详解Java实现数据结构之并查集
2021/06/23 Java/Android