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定时执行之Timer用法示例
May 27 Python
在Django的URLconf中使用命名组的方法
Jul 18 Python
利用 Monkey 命令操作屏幕快速滑动
Dec 07 Python
Python正则表达式教程之二:捕获篇
Mar 02 Python
Python做简单的字符串匹配详解
Mar 21 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
Python 编码规范(Google Python Style Guide)
May 05 Python
Django教程笔记之中间件middleware详解
Aug 01 Python
Python两个字典键同值相加的几种方法
Mar 05 Python
python super的使用方法及实例详解
Sep 25 Python
python numpy存取文件的方式
Apr 01 Python
Python实现仓库管理系统
May 30 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
BBS(php & mysql)完整版(四)
2006/10/09 PHP
COM in PHP (winows only)
2006/10/09 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
2014/05/04 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
JS的反射问题
2010/04/07 Javascript
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
实例详解jQuery表单验证插件validate
2016/01/18 Javascript
js实现仿购物车加减效果
2017/03/01 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
2017/09/20 Javascript
AnglarJs中的上拉加载实现代码
2018/02/08 Javascript
nodejs更改项目端口号的方法
2018/05/13 NodeJs
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
vue spa应用中的路由缓存问题与解决方案
2019/05/31 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
17个Python小技巧分享
2015/01/23 Python
Python对象与引用的介绍
2019/01/24 Python
打包python 加icon 去掉cmd黑窗口方法
2019/06/24 Python
python实现两个文件夹的同步
2019/08/29 Python
python每5分钟从kafka中提取数据的例子
2019/12/23 Python
Python lambda表达式原理及用法解析
2020/08/18 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
selenium如何定位span元素的实现
2021/01/13 Python
高街生活方式全球在线商店:AZBRO
2017/08/26 全球购物
Farfetch香港官网:汇集全球时尚奢侈品购物平台
2017/11/26 全球购物
财务管理专业自荐信范文
2013/12/24 职场文书
运动会开幕式解说词
2014/02/05 职场文书
上党课的心得体会
2014/09/02 职场文书
银行贷款收入证明
2014/10/17 职场文书
2014年业务员工作总结范文
2014/11/17 职场文书
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python
Python可变与不可变数据和深拷贝与浅拷贝
2022/04/06 Python