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之集成开发环境(IDE)
Sep 12 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
Dec 25 Python
Python中Scrapy爬虫图片处理详解
Nov 29 Python
理解python中生成器用法
Dec 20 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
详解python之协程gevent模块
Jun 14 Python
基于wxPython的GUI实现输入对话框(1)
Feb 27 Python
pandas如何处理缺失值
Jul 31 Python
python多进程并发demo实例解析
Dec 13 Python
Python使用循环神经网络解决文本分类问题的方法详解
Jan 16 Python
Django中的AutoField字段使用
May 18 Python
python基础之爬虫入门
May 10 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过滤危险html代码
2008/08/18 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
firefox下对ajax的onreadystatechange的支持情况分析
2009/12/14 Javascript
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
JS中实现replaceAll的方法(实例代码)
2013/11/12 Javascript
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
javascript页面倒计时实例
2015/07/25 Javascript
Bootstrap每天必学之js插件
2015/11/30 Javascript
详解JavaScript UTC时间转换方法
2016/01/07 Javascript
浅析创建javascript对象的方法
2016/05/13 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
js获取一组日期中最近连续的天数
2017/05/25 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
基于JavaScript实现留言板功能
2020/03/16 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
手写Vue2.0 数据劫持的示例
2021/03/04 Vue.js
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
python3实现暴力穷举博客园密码
2016/06/19 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
python导出chrome书签到markdown文件的实例代码
2017/12/27 Python
Python实现简单生成验证码功能【基于random模块】
2018/02/10 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
程序集与命名空间有什么不同
2014/07/25 面试题
商务英语求职自荐信范文
2013/12/24 职场文书
公司股权转让协议书
2014/04/12 职场文书
会计工作总结范文2014
2014/12/23 职场文书
承诺函格式模板
2015/01/21 职场文书
手术室护士个人总结
2015/02/13 职场文书
运动会表扬稿范文
2015/05/05 职场文书
Python如何让字典保持有序排列
2022/04/29 Python
Redis实现分布式锁的五种方法详解
2022/06/14 Redis