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中对象迭代与反迭代的技巧总结
Sep 17 Python
python实现多线程抓取知乎用户
Dec 12 Python
python实现单线程多任务非阻塞TCP服务端
Jun 13 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
解决pycharm remote deployment 配置的问题
Jun 27 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
Python (Win)readline和tab补全的安装方法
Aug 27 Python
python next()和iter()函数原理解析
Feb 07 Python
Python 序列化和反序列化库 MarshMallow 的用法实例代码
Feb 25 Python
python解释器pycharm安装及环境变量配置教程图文详解
Feb 26 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
Apr 16 Python
Python+Opencv身份证号码区域提取及识别实现
Aug 25 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
PHP GD 图像处理组件的常用函数总结
2010/04/28 PHP
献给php初学者(入门学习经验谈)
2010/10/12 PHP
PHP SPL标准库之数据结构堆(SplHeap)简单使用实例
2015/05/12 PHP
PHP接收App端发送文件流的方法
2016/09/23 PHP
根据分辩率调用不同的CSS.
2007/01/08 Javascript
javascript 打印页面代码
2009/03/24 Javascript
JavaScript中:表达式和语句的区别[译]
2012/09/17 Javascript
调用innerHTML之后onclick失效问题的解决方法
2014/01/28 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
jQuery的中 is(':visible') 解析及用法(必看)
2017/02/12 Javascript
javascript基于定时器实现进度条功能实例
2017/10/13 Javascript
JavaScript 跨域之POST实现方法
2018/05/07 Javascript
Vue Router的懒加载路径的解决方法
2018/06/21 Javascript
vue-router重定向和路由别名的使用讲解
2019/01/19 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
jQuery 选择器用法基础入门示例
2020/01/04 jQuery
js实现浏览器打印功能的示例代码
2020/07/15 Javascript
详解Vue的组件中data选项为什么必须是函数
2020/08/17 Javascript
一些Python中的二维数组的操作方法
2015/05/02 Python
Python变量作用范围实例分析
2015/07/07 Python
Python排序算法实例代码
2017/08/10 Python
python调用API实现智能回复机器人
2018/04/10 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
python面向对象实现名片管理系统文件版
2019/04/26 Python
scrapy-redis源码分析之发送POST请求详解
2019/05/15 Python
python3 实现函数写文件路径的正确方法
2019/11/27 Python
Pytorch的mean和std调查实例
2020/01/02 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
Python求两个字符串最长公共子序列代码实例
2020/03/05 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
电子专业求职信
2014/06/19 职场文书
求职推荐信范文
2015/03/27 职场文书
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL
Python3接口性能测试实例代码
2021/06/20 Python