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 代码性能优化技巧分享
Aug 07 Python
Python2.x版本中cmp()方法的使用教程
May 14 Python
Python每天必学之bytes字节
Jan 28 Python
Python实现二分查找与bisect模块详解
Jan 13 Python
NetworkX之Prim算法(实例讲解)
Dec 22 Python
python 扩展print打印文件路径和当前时间信息的实例代码
Oct 11 Python
使用tensorflow实现矩阵分解方式
Feb 07 Python
keras 解决加载lstm+crf模型出错的问题
Jun 10 Python
python 识别登录验证码图片功能的实现代码(完整代码)
Jul 03 Python
opencv 图像礼帽和图像黑帽的实现
Jul 07 Python
基于Python正确读取资源文件
Sep 14 Python
python实现AdaBoost算法的示例
Oct 03 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
全国FM电台频率大全 - 1 北京市
2020/03/11 无线电
用PHP编程语言开发动态WAP页面
2006/10/09 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
2014/06/25 PHP
PHP使用finfo_file()函数检测上传图片类型的实现方法
2017/04/18 PHP
layui数据表格自定义每页条数limit设置
2019/10/26 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
JTrackBar水平拖动效果
2007/07/15 Javascript
js获取url参数的使用扩展实例
2007/12/29 Javascript
使用SyntaxHighlighter实现HTML高亮显示代码的方法
2010/02/04 Javascript
jQuery监控文本框事件并作相应处理的方法
2015/04/16 Javascript
详解javascript数组去重问题
2015/11/06 Javascript
Nodejs express框架一个工程中同时使用ejs模版和jade模版
2015/12/28 NodeJs
JavaScript实现多种排序算法
2016/02/24 Javascript
15个值得开发人员关注的jQuery开发技巧和心得总结【经典收藏】
2016/05/25 Javascript
vue实现可增删查改的成绩单
2016/10/27 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
在Vue中使用Compass的方法
2018/03/02 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
详解python中executemany和序列的使用方法
2017/08/12 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
python筛选出两个文件中重复行的方法
2018/05/31 Python
Python弹出输入框并获取输入值的实例
2019/06/18 Python
pycharm安装及如何导入numpy
2020/04/03 Python
python requests.get带header
2020/05/05 Python
html5拍照功能实现代码(htm5上传文件)
2013/12/11 HTML / CSS
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
linux面试题参考答案(6)
2016/06/23 面试题
教学器材管理制度
2014/01/26 职场文书
师范大学生求职信
2014/06/13 职场文书
环保宣传语大全
2015/07/13 职场文书
个人自我鉴定怎么写?
2019/07/01 职场文书
JavaScript与JQuery框架基础入门教程
2021/07/15 Javascript