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中使用ElementTree解析XML示例
Jun 02 Python
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
Python标准库sched模块使用指南
Jul 06 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
python实现猜数字小游戏
Mar 24 Python
Django 中使用流响应处理视频的方法
Jul 20 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
python从list列表中选出一个数和其对应的坐标方法
Jul 20 Python
python向图片里添加文字
Nov 26 Python
python从zip中删除指定后缀文件(推荐)
Dec 05 Python
Python叠加矩形框图层2种方法及效果
Jun 18 Python
BeautifulSoup中find和find_all的使用详解
Dec 07 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中使用接口实现工厂设计模式的代码
2012/06/17 PHP
PHP获取用户的浏览器与操作系统信息的代码
2012/09/04 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
Laravel 5框架学习之环境与配置
2015/04/08 PHP
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
基于JQuery实现的图片自动进行缩放和裁剪处理
2014/01/31 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
Javascript的表单与验证-非空验证
2016/03/18 Javascript
axios学习教程全攻略
2017/03/26 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
Vue Router history模式的配置方法及其原理
2019/05/30 Javascript
vue.js中导出Excel表格的案例分析
2019/06/11 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
vue使用transition组件动画效果的实例代码
2021/01/28 Vue.js
基于python的汉字转GBK码实现代码
2012/02/19 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
python爬虫项目设置一个中断重连的程序的实现
2019/07/26 Python
Python实现栈和队列的简单操作方法示例
2019/11/29 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
html5 canvas实现给图片添加平铺水印
2019/08/20 HTML / CSS
澳大利亚Mocha官方网站:包、钱包、珠宝和配饰
2019/07/18 全球购物
CSS代码检查工具stylelint的使用方法详解
2021/03/27 HTML / CSS
通息工程毕业生自荐信
2013/10/16 职场文书
优秀老师事迹材料
2014/02/05 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
公务员试用期满考核材料
2014/05/22 职场文书
国企干部对照检查材料
2014/08/22 职场文书
党员个人对照检查材料范文
2014/09/24 职场文书
民主评议党员总结
2014/10/20 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
2014年管理工作总结
2014/11/22 职场文书
给校长的建议书范文
2015/09/14 职场文书