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 相关文章推荐
netbeans7安装python插件的方法图解
Dec 24 Python
python实现2014火车票查询代码分享
Jan 10 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
python使用opencv进行人脸识别
Apr 07 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
May 24 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
May 07 Python
python微信公众号之关键词自动回复
Jun 15 Python
Python Django 实现简单注册功能过程详解
Jul 29 Python
python中几种自动微分库解析
Aug 29 Python
python Django框架实现web端分页呈现数据
Oct 31 Python
Python Selenium截图功能实现代码
Apr 26 Python
Python容器类型公共方法总结
Aug 19 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中如何将数组变量写入文件
2013/06/06 PHP
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
php之curl设置超时实例
2014/11/03 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
JavaScript Event事件学习第一章 Event介绍
2010/02/07 Javascript
小试JQuery的AutoComplete插件
2011/05/04 Javascript
js防止表单重复提交实现代码
2012/09/05 Javascript
js子页面获取父页面数据示例
2014/05/15 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
jquery.uploadify插件在chrome浏览器频繁崩溃解决方法
2015/03/01 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
js自定义QQ菜单效果
2017/01/10 Javascript
JS实现浏览器打印、打印预览示例
2017/02/28 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
详解vue-cli脚手架build目录中的dev-server.js配置文件
2017/11/24 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
2018/06/05 Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
2018/07/26 Javascript
Vue动态加载异步组件的方法
2018/11/21 Javascript
手机浏览器唤起微信分享(JS)
2020/10/11 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
Python获取系统默认字符编码的方法
2015/06/04 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
在Django的View中使用asyncio的方法
2019/07/12 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
玩具反斗城葡萄牙官方商城:Toys"R"Us葡萄牙
2016/10/21 全球购物
编辑找工作求职信分享
2014/01/03 职场文书
岗位职责风险点
2014/03/12 职场文书
安全生产管理责任书
2014/04/16 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
个人违纪检讨书
2014/09/15 职场文书
2014年工会工作总结
2014/11/12 职场文书
新郎新娘答谢词
2015/01/04 职场文书
技术入股协议书
2016/03/22 职场文书
Python帮你解决手机qq微信内存占用太多问题
2022/02/15 Python