Python3批量移动指定文件到指定文件夹方法示例


Posted in Python onSeptember 02, 2019

引言

某人需求:以某excel中姓名信息为名建立一系列文件夹,分别将四个文件夹中与人名对应的文件汇总到该人名对应的文件夹中,共近200人,手工处理费时费力。

需求分解:

从excel中提取代号index和姓名信息name
以index_name格式批量建立文件夹namefolder
分别遍历四个文件夹及其子文件夹,将其中“文件名filename中包含姓名name”的文档移动到该人对应的新建的文件夹namefolder中

excel内容: 

Python3批量移动指定文件到指定文件夹方法示例

处理前: 

Python3批量移动指定文件到指定文件夹方法示例 

处理后: 

Python3批量移动指定文件到指定文件夹方法示例

功能实现比较容易,权当记录。

环境:Python3.6+macOS10.12.5

代码

# -*- coding: utf-8 -*-

import os
import shutil
import xlrd
import string

### 创建多层目录
def mkdirs(path):
 # 去除首位空格
 path = path.strip()
 # 去除尾部 \ 符号
 path = path.rstrip("\\")

 # 判断路径是否存在
 # 存在  True
 # 不存在 False
 isExists = os.path.exists(path)

 # 判断结果
 if not isExists:
  # 创建目录操作函数
  os.makedirs(path)
  # 如果不存在则创建目录
  print(path + ' 创建成功')
  return True
 else:
  # 如果目录存在则不创建,并提示目录已存在
  print(path + ' 目录已存在')
  return False

def search_file(path, filename, newpath):
 queue = []
 queue.append(path);
 while len(queue) > 0:
  tmp = queue.pop(0)
  if (os.path.isdir(tmp)):#如果该路径是文件夹
   for item in os.listdir(tmp):#遍历该路径中文件和文件夹
    queue.append(os.path.join(tmp, item))#将所得路径加入队列queue
  elif (os.path.isfile(tmp)):#如果该路径是文件
   name = os.path.basename(tmp) # 获取文件名
   dirname = os.path.dirname(tmp) # 获取文件目录
   full_path = os.path.join(dirname, name) # 将文件名与文件目录连接起来,形成完整路径
   des_path = newpath+'/'+path+'_'+name #目标路径,将该文件夹信息添加进最后的文件名中
   if filename in name:#匹配符合条件的文件,也可用if(name.find(filename)!=-1):
    shutil.move(full_path, des_path)#移动文件到目标路径(移动+重命名)

if __name__ == '__main__':
 #打开excel文件
 data=xlrd.open_workbook('名单.xlsx')
 #获取第一张工作表(通过索引的方式)
 table=data.sheet_by_index(0)
 #datalist用来存放数据
 datalist_UNIQID=[]
 datalist_NAME=[]
 #将table中第一行的数据读取并添加到data_list中
 datalist_UNIQID.extend(table.col_values(0))
 datalist_NAME.extend(table.col_values(2))
 #foldname = [a+'_'+b for a, b in zip(datalist_UNIQID,datalist_NAME)]
 dir_tjbg='zzz报告'
 dir_fsgz='xxx证书'
 dir_hbpx='yyy证书'
 dir_ykfs='xyz证书'
 #打印出第一行的全部数据
 for index, name in zip(datalist_UNIQID, datalist_NAME):
  foldername=index+'_'+name.strip()
  #print(foldername)
  mkdirs(foldername)
  search_file(dir_tjbg,name.strip(),foldername)
  search_file(dir_fsgz,name.strip(),foldername)
  search_file(dir_hbpx,name.strip(),foldername)
  search_file(dir_ykfs,name.strip(),foldername)

备忘

1. 同步遍历两个list

l1 = [2,2,2,2]
l2 = [3,3,3,3]
prod = [a*b for a, b in zip(l1,l2)]
print prod
# [6, 6, 6, 6]
add = [a+b for a, b in zip(l1,l2)]
print add
# [5, 5, 5, 5]

2. 文件夹操作

import os
import shutil

os.getcwd() # 获取当前工作目录,非脚本目录
os.listdir() # 返回指定目录下的所有文件和目录,非递归
os.remove() # 删除文件
os.removedirs() #删除目录
os.path.isfile() # 检验给出的路径是否是一个文件
os.path.isdir() # 检验给出的路径是否是一个目录
os.path.isabs() # 判断是否是绝对路径
os.path.exists() # 检验给出的路径是否真实存在
os.path.split() # 返回一个路径的目录名和文件名
os.path.splitext() # 分离文件扩展名
os.path.dirname() # 获取文件路径名
os.path.basename() # 获取一个绝对路径下的文件名
os.system() # 运行shell命令
os.rename(old,new) # 重命名文件或目录
os.makedirs(r"c:\python\test") # 创建多级目录
os.mkdir("test") # 创建单个目录
os.exit() # 终止当前进程
os.path.getsize(filename) # 获取文件大小
os.mknod("test.txt") # 创建空文件

shutil.copyfile("oldfile","newfile") # oldfile和newfile都只能是文件
shutil.copytree("olddir","newdir") # olddir和newdir都只能是目录,且newdir必须不存在
shutil.move("oldpos","newpos") # 移动文件或目录
shutil.rmtree("dir") # 删除目录,与os.removedirs()相同
os.path.join(“home”, "me", "mywork") # 路径连接

参考

  • Python3 操作Excel文件(读写)
  • Python操作excel的几种方式?xlrd、xlwt、openpyxl(部分函数不适用于python3,如column_values改为col_values)
  • Python中zip()函数用法举例
  • python脚本初体验之一键移动自定格式文件
  • 每天一个python模块之文件目录操作-os以及shutil模块

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python中的两个内置模块介绍
Apr 05 Python
举例讲解Python中的Null模式与桥接模式编程
Feb 02 Python
Python Requests安装与简单运用
Apr 07 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
Python设计模式之适配器模式原理与用法详解
Jan 15 Python
详解python tkinter教程-事件绑定
Mar 28 Python
PyTorch和Keras计算模型参数的例子
Jan 02 Python
对Tensorflow中tensorboard日志的生成与显示详解
Feb 04 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
Jun 23 Python
详解Django ORM引发的数据库N+1性能问题
Oct 12 Python
实例讲解Python中sys.argv[]的用法
Jun 03 Python
如何使用pdb进行Python调试
Jun 30 Python
Python流程控制 if else实现解析
Sep 02 #Python
Python 变量的创建过程详解
Sep 02 #Python
python脚本之一键移动自定格式文件方法实例
Sep 02 #Python
Python中zip()函数的简单用法举例
Sep 02 #Python
Python在OpenCV里实现极坐标变换功能
Sep 02 #Python
Python 读取用户指令和格式化打印实现解析
Sep 02 #Python
Python操作excel的方法总结(xlrd、xlwt、openpyxl)
Sep 02 #Python
You might like
PHP4与PHP5的时间格式问题
2008/02/17 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
PHP中file_exists使用中遇到的问题小结
2016/04/05 PHP
Yii框架数据库查询、增加、删除操作示例
2019/10/14 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
2019/12/13 PHP
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
2013/04/19 Javascript
探讨js中的双感叹号判断
2013/11/11 Javascript
使用ajaxfileupload.js实现ajax上传文件php版
2014/06/26 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
2014/10/20 Javascript
jQuery判断浏览器并动态调整select宽度的方法
2016/03/02 Javascript
浅谈JavaScript 标准对象
2016/06/02 Javascript
vue webpack开发访问后台接口全局配置的方法
2018/09/18 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
[00:27]DOTA2荣耀之路2:Patience from zhou!
2018/05/24 DOTA
安装dbus-python的简要教程
2015/05/05 Python
Python使用zip合并相邻列表项的方法示例
2018/03/17 Python
python实现搜索文本文件内容脚本
2018/06/22 Python
Python 获取div标签中的文字实例
2018/12/20 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
python读取有密码的zip压缩文件实例
2019/02/08 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
2019/10/25 Python
关于多元线性回归分析——Python&SPSS
2020/02/24 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
2020/06/04 Python
使用HTML5 Canvas绘制直线或折线等线条的方法讲解
2016/03/14 HTML / CSS
中国首家奢侈品O2O网购平台:第五大道奢侈品网
2017/12/14 全球购物
自荐信写法介绍
2014/01/25 职场文书
法制宣传月活动总结
2014/04/29 职场文书
实习护士自荐信
2015/03/25 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
springboot中的pom文件 project报错问题
2022/01/18 Java/Android