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 29 Python
python实现查询IP地址所在地
Mar 29 Python
Python实现将doc转化pdf格式文档的方法
Jan 19 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
May 24 Python
Python Image模块基本图像处理操作小结
Apr 13 Python
Python3内置模块pprint让打印比print更美观详解
Jun 02 Python
python中class的定义及使用教程
Sep 18 Python
python2和python3应该学哪个(python3.6与python3.7的选择)
Oct 01 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
Jan 08 Python
python实现梯度下降法
Mar 24 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 Python
Python IO文件管理的具体使用
Mar 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
php获取网页内容方法总结
2008/12/04 PHP
php类常量的使用详解
2013/06/08 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
jQuery实现ctrl+enter(回车)提交表单
2015/10/19 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
详解vue.js2.0父组件点击触发子组件方法
2017/05/10 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
如何在面试中手写出javascript节流和防抖函数
2020/10/22 Javascript
[02:57]DOTA2英雄基础教程 风行者
2014/01/16 DOTA
python从网络读取图片并直接进行处理的方法
2015/05/22 Python
Python实现购物车功能的方法分析
2017/11/10 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
python提取具有某种特定字符串的行数据方法
2018/12/11 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
2019/06/13 Python
Tensorflow tf.dynamic_partition矩阵拆分示例(Python3)
2020/02/07 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
2021/01/22 Python
如何设置Java的运行环境
2013/04/05 面试题
静态成员和非静态成员的区别
2012/05/12 面试题
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
大学辅导员事迹材料
2014/02/05 职场文书
乌鸦喝水教学反思
2014/02/07 职场文书
致垒球运动员加油稿
2014/02/16 职场文书
预防煤气中毒方案
2014/06/16 职场文书
2014党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
2014年班级工作总结
2014/11/14 职场文书
初中家长意见
2015/06/03 职场文书
垂直极限观后感
2015/06/08 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
HTML常用标签超详细整理
2022/03/19 HTML / CSS
Python循环之while无限迭代
2022/04/30 Python