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中使用xlrd、xlwt操作excel表格详解
Jan 29 Python
python字典基本操作实例分析
Jul 11 Python
Django ORM框架的定时任务如何使用详解
Oct 19 Python
对python3新增的byte类型详解
Dec 04 Python
Python代码实现http/https代理服务器的脚本
Aug 12 Python
Python实现使用dir获取类的方法列表
Dec 24 Python
PyCharm中Matplotlib绘图不能显示UI效果的问题解决
Mar 12 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
Apr 13 Python
python实现批量命名照片
Jun 18 Python
sklearn的predict_proba使用说明
Jun 28 Python
Python 测试框架unittest和pytest的优劣
Sep 26 Python
Python如何使用ElementTree解析xml
Oct 12 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概述.
2006/10/09 PHP
计算2000年01月01日起到指定日的天数
2006/10/09 PHP
在PHP中读取和写入WORD文档的代码
2008/04/09 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
php制作动态随机验证码
2015/02/12 PHP
功能强大的PHP POST提交数据类
2016/07/15 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
PHP实现的统计数据功能详解
2016/12/06 PHP
用javascript自动显示最后更新时间
2007/03/15 Javascript
js字符编码函数区别分析
2008/06/05 Javascript
extjs grid取到数据而不显示的解决
2008/12/29 Javascript
jquery 屏蔽一个区域内的所有元素,禁止输入
2009/10/22 Javascript
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
浅析node.js中close事件
2014/11/26 Javascript
Select下拉框模糊查询功能实现代码
2016/07/22 Javascript
Java  Spring 事务回滚详解
2016/10/17 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
2018/08/27 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
[41:13]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第一场 11.20
2020/11/20 DOTA
Django 前后台的数据传递的方法
2017/08/08 Python
windows下 兼容Python2和Python3的解决方法
2018/12/05 Python
Python 数据的累加与统计的示例代码
2020/08/03 Python
CSS3中的display:grid,网格布局介绍
2019/10/30 HTML / CSS
SQL Server的固定数据库角色都有哪些?对应的服务器权限有哪些?
2013/05/18 面试题
初级Java程序员面试题
2016/03/03 面试题
影视艺术学院毕业生自荐信
2013/11/13 职场文书
电教室标语
2014/06/20 职场文书
2014年纠风工作总结
2014/12/08 职场文书
2015年维修电工工作总结
2015/04/25 职场文书
公司酒会主持词
2015/07/02 职场文书
大学军训心得体会800字
2016/01/11 职场文书
2019销售早会主持词
2019/06/27 职场文书
python Polars库的使用简介
2021/04/21 Python
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫