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 相关文章推荐
仅利用30行Python代码来展示X算法
Apr 01 Python
Django1.7+python 2.78+pycharm配置mysql数据库
Oct 09 Python
Django实现简单分页功能的方法详解
Dec 05 Python
python excel使用xlutils类库实现追加写功能的方法
May 02 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
May 29 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
如何在Cloud Studio上执行Python代码?
Aug 09 Python
Python新手学习标准库模块命名
May 29 Python
JAVA及PYTHON质数计算代码对比解析
Jun 10 Python
Python中openpyxl实现vlookup函数的实例
Oct 28 Python
Django中ORM的基本使用教程
Dec 22 Python
selenium+python实现基本自动化测试的示例代码
Jan 27 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控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
JavaScript 检测浏览器和操作系统的脚本
2008/12/26 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
浅谈JS日期(Date)处理函数
2014/12/07 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
ES6新特性之模块Module用法详解
2017/04/01 Javascript
详解用node编写自己的cli工具
2017/05/23 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
angular实现input输入监听的示例
2018/08/31 Javascript
vue.js实现的全选与全不选功能示例【基于elementui】
2018/12/03 Javascript
Vue表单之v-model绑定下拉列表功能
2019/05/14 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
如何基于原生javaScript生成带图片的二维码
2019/11/21 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
2020/10/23 Javascript
[03:42]2014DOTA2国际邀请赛 第三日比赛排位扑朔迷离
2014/07/12 DOTA
[02:23]1个至宝=115个英雄特效 最“绿”至宝拉比克“魔导师密钥”登场
2018/12/29 DOTA
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
Python中尝试多线程编程的一个简明例子
2015/04/07 Python
python实现web方式logview的方法
2015/08/10 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
python分数表示方式和写法
2019/06/26 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
法国二手手袋、手表和奢侈珠宝购物网站:Collector Square
2018/07/05 全球购物
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
链表面试题-一个链表的结点结构
2015/05/04 面试题
美德好少年主要事迹
2014/01/29 职场文书
学生感冒英文请假条
2014/02/04 职场文书
模范家庭事迹材料
2014/02/10 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
详解Python中*args和**kwargs的使用
2022/04/07 Python