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判断IP地址合法性的方法实例
Mar 13 Python
Python爬取Coursera课程资源的详细过程
Nov 04 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
Jul 13 Python
python基础之入门必看操作
Jul 26 Python
tensorflow实现简单的卷积网络
May 24 Python
python程序 创建多线程过程详解
Sep 23 Python
使用Python将图片转正方形的两种方法实例代码详解
Apr 29 Python
opencv 阈值分割的具体使用
Jul 08 Python
Scrapy 配置动态代理IP的实现
Sep 28 Python
分析Python感知线程状态的解决方案之Event与信号量
Jun 16 Python
如何用python清洗文件中的数据
Jun 18 Python
python神经网络Xception模型
May 06 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 print EOF实现方法
2009/05/21 PHP
php max_execution_time执行时间问题
2011/07/17 PHP
百度工程师讲PHP函数的实现原理及性能分析(二)
2015/05/13 PHP
Linux下从零开始安装配置Nginx服务器+PHP开发环境
2015/12/21 PHP
golang与PHP输出excel示例
2016/07/22 PHP
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
jQuery实现下拉框左右选择的简单实例
2014/02/22 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
JS实现清除指定cookies的方法
2014/09/20 Javascript
简介JavaScript中strike()方法的使用
2015/06/08 Javascript
js实现用户离开页面前提示是否离开此页面的方法(包括浏览器按钮事件)
2015/07/18 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
js实现倒计时效果(小于10补零)
2017/03/08 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
详解vue2.0 不同屏幕适配及px与rem转换问题
2018/02/23 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
JavaScript继承的特性与实践应用深入详解
2018/12/30 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
Python获取Windows或Linux主机名称通用函数分享
2014/11/22 Python
python3实现读取chrome浏览器cookie
2016/06/19 Python
解决python中画图时x,y轴名称出现中文乱码的问题
2019/01/29 Python
Python-接口开发入门解析
2019/08/01 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
Python计算信息熵实例
2020/06/18 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
优秀信贷员先进事迹
2014/01/31 职场文书
借款协议书
2014/04/12 职场文书
社区文明倡议书
2015/04/28 职场文书
教师个人师德工作总结2015
2015/05/12 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
MySQL创建高性能索引的全步骤
2021/05/02 MySQL
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python