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编程中对Monkey Patch猴子补丁开发方式的运用
May 27 Python
Python 常用string函数详解
May 30 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
Sep 19 Python
正确理解python中的关键字“with”与上下文管理器
Apr 21 Python
解决python文件双击运行秒退的问题
Jun 24 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
在Python中获取操作系统的进程信息
Aug 27 Python
python爬虫把url链接编码成gbk2312格式过程解析
Jun 08 Python
PyTorch实现重写/改写Dataset并载入Dataloader
Jul 14 Python
python opencv肤色检测的实现示例
Dec 21 Python
如何在pycharm中快捷安装pip命令(如pygame)
May 31 Python
python数据分析之单因素分析线性拟合及地理编码
Jun 25 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
表格展示无限级分类(PHP版)
2012/08/21 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
2013/06/24 PHP
PHP file_get_contents函数读取远程数据超时的解决方法
2015/05/13 PHP
JS中剪贴板兼容性、判断复制成功或失败
2021/03/09 Javascript
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
犀利的js 函数集合
2009/06/11 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
JQUERY对单选框(radio)操作的小例子
2013/04/25 Javascript
javascript实例--教你实现扑克牌洗牌功能
2014/05/15 Javascript
详解JavaScript中数组的相关知识
2015/07/29 Javascript
分享Javascript实用方法二
2015/12/13 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
详解Jquery 遍历数组之$().each方法与$.each()方法介绍
2017/01/09 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
vue动态组件实现选项卡切换效果
2017/03/08 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
vue子父组件通信的实现代码
2017/07/09 Javascript
hammer.js实现图片手势放大效果
2017/08/29 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
js实现简易计算器功能
2019/10/18 Javascript
Vue filter 过滤当前时间 实现实时更新效果
2019/12/20 Javascript
Vue性能优化的方法
2020/07/30 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
tensorflow实现softma识别MNIST
2018/03/12 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
AmazeUI底部导航栏与分享按钮的示例代码
2020/08/18 HTML / CSS
物业管理专业个人的自我评价
2013/11/19 职场文书
自我评价格式
2014/01/06 职场文书
安全资金保障制度
2014/01/23 职场文书
乡镇一岗双责责任书
2015/01/29 职场文书
党员廉洁自律个人总结
2015/02/13 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书
Python实战之实现康威生命游戏
2021/04/26 Python
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server