Python批量复制迁移文件夹
前言
Python可以利用shutil库进行对文件夹,文件的迁移。而在本次的实践当中,难点在于目标文件夹的名称和数据源文件夹的名称,需要利用
工作单位提供的中间数据去进行对比连接起来。
例如:目标源的文件夹叫做,“1.台协办”。而数据源的文件夹叫做“103_广东省台协办委员会”。而他们中间的数据叫“103台协办”。
通过目标源的文字部分,连接中间数据,再用中间数据的数字编码部分,连接数据源的文件夹名称。
思路:通过生成器生成三个列表,将需要的数据进行拆分,然后去对比每个数据。最后将符合要求的文件名留下,用于绝对路径的组成,进行文件复制迁移。
复制迁移的代码
import os
import shutil group_num = '第一组' NO1 = ['例子:202广东省李小龙会'] #中间数据,有提供中间数据,连接两个不完全相同的文件夹内容 data_type = [('电子帐1','财政指标'),('电子帐5','公务卡信息')] #数据类型,在元组内一一对应
for data_type_longer,data_type in data_type:
root = r'F:\目标源路径\{group_num}'.format_map(var()) #里面的文件名均为“数字.文字”,例如“22.广东省李小龙会”
root2 = r'F:\数据源路径\{data_type}'.format_map(var())#里面的文件名均为“数字_文字”,例如“202_广东省李小龙纪念协会”
list1 = [(i,i[:3],i[3:]) for i in NO1] #将中间数据拆为,原字符串,前3位数字,3位数字后的中文
list2 = [(i,i.split('.')[0]),i.split('.')[-1] for i in os.lisdir(root)]#将目标源内的文件名以“.”拆分为,原字符串,数字,文字部分
list3 = [(i,i.split('_')[0]),i.split('_')[-1] for i in os.lisdir(root2)]#将数据源内的文件名以“_”拆分为,原字符串,数字,文字部分
res = list()
for li1 in list1:
for li2 in list2:
for li3 in list3:
if li3[1] == li1[1] and li1[2] == li2[2]:#做一个对比
res.append(li2[0],li3[0])#采集到最终的数据,用于两个需要复制移动文件夹的路径
print(res,len(res))
for i in res:
unit_string = i[0]
unit_number = i[1]
new_dir_name = r'F:\目标源路径\{group_num}\{unit_string}\{data_type_longer}\{unit_number}'.format_map(var())#目标源的绝对路径
old_dir_name = r'F:\数据源路径\{data_type}\{unit_number}'.format_map(var())#数据源的绝对路径
shutil.copytree(old_dir_name,new_dir_name)
目标源的绝对路径组成是:\组名\单位名称\数据类型\迁移的文件夹名称
数据源的绝对路径组成是:\数据类型\迁移的文件夹名称
执行成功
检查的脚本
因为需要检查目标源里面的文件夹哪个是空的,就是没有匹配到合适的数据源文件,所以写了一个检查脚本。
import os group_list = ['第一组','第二组','第三组','第四组'....] for i in group_list:
group_num = i
root = r'F:\目标源路径\{group_num}'.format_map(var())
list0 = os.listdir(root)
data_type_all = [('电子帐1','财政指标'),('电子帐5','公务卡信息')....]
print('\n')
print('\n')
print('___________在{group_num}中____________'.format_map(var()))
for unit in list0:
if os.path.isdir(r'F:\目标源路径\{group_num}\{unit}'.format_map(var())):#判断是否一个文件夹,因为有其他文件中里面
print('\n')
print('___________在{unit}中____________'.format_map(var()))
for data_type in data_type_all:
data_type0 = data_type[0]
root1 = r'F:\目标源路径\{group_num}\{unit}\{data_type0}'.format_map(var())
list_empty = os.listdir(root1)
if list_empty==[]: #判断是否一个空的文件夹
print('______缺少——————{data_type0}'.format_map(var()))
else:
pass
else:
pass
Python批量复制迁移文件夹的更多相关文章
- python批量改动指定文件夹文件名称
这小样例仅仅要是说明用python怎么批量改动指定文件夹的文件名称: 记得要把脚本跟改动的文件放在同一个文件夹下 #encoding:utf-8 import os import sys files ...
- 批量复制windows文件夹下所有文件名
第一步,打开文件夹 第二步,在该文件夹下新建一个txt文件,然后将“.txt”后缀名修改为“.bat” txt文件内容“DIR *.* /B >LIST.TXT” 第三步,双击“.bat”,直接 ...
- 利用Python批量重命名文件夹下文件
#!/usr/bin/python # -*- coding: UTF-8 -*- # -*- coding:utf8 -*- import os from string import digits ...
- Python批量复制和重命名文件
Python批量复制和重命名文件 示例代码 #! /usr/bin/env python # coding=utf-8 import os import shutil import time impo ...
- SharePoint 服务器端对象迁移文件夹
最近有个需求,写个定时迁移文件夹的小程序,因为计时器任务比较繁琐,所以选择了控制台程序.然后,用windows的计划任务执行,也许,会有广大朋友需要类似的功能,简单的分享一下代码逻辑,功能非常简单,希 ...
- 基于Python——实现两个文件夹中的文件拷贝
[背景]当复制一个文件夹中的某文件到另一个文件夹中时是一件很容易的事情,可是如果存在很多文件夹中的文件需要一一拷贝,就会变的很繁琐,稍有不慎就会遗漏,今天就用Python来解决这个问题—— [代码实现 ...
- 基于Python——实现解压文件夹中的.zip文件
[背景]当一个文件夹里存好好多.zip文件需要解压时,手动一个个解压再给文件重命名是一件很麻烦的事情,基于此,今天介绍一种使用python实现批量解压文件夹中的压缩文件并给文件重命名的方法—— [代码 ...
- 文件处理工具 gif合成工具 文件后缀批量添加工具 文件夹搜索工具 重复文件查找工具 网页图片解析下载工具等
以下都是一些简单的免费分享的工具,技术支持群:592132877,提供定制化服务开发. Gif动图合成工具 主要功能是扫描指定的文件夹里的所有zip文件,然后提取Zip文件中的图片,并合成一张gif图 ...
- python批量读取txt文件为DataFrame
我们有时候会批量处理同一个文件夹下的文件,并且希望读取到一个文件里面便于我们计算操作.比方我有下图一系列的txt文件,我该如何把它们写入一个txt文件中并且读取为DataFrame格式呢? 首先我们要 ...
随机推荐
- redis的maxmemory设置以及淘汰策略介绍
转载地址:http://www.2cto.com/database/201507/420889.html redis的maxmemory参数用于控制redis可使用的最大内存容量.如果超过maxmem ...
- spring Aop概念
面向切面编程(AOP)通过提供另外一种思考程序结构的途经来弥补面向对象编程(OOP)的不足.在OOP中模块化的关键单元是类(classes),而在AOP中模块化的单元则是切面.切面能对关注点进行模块化 ...
- ERROR: from PIL import Image ImportError: No module named PIL
ERROR: from PIL import Image ImportError: No module named PIL 到 http://www.pythonware.com/products/p ...
- C# 异常日志记录
using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Web; na ...
- python IDE安装-mac
mac 配置Python集成开发环境(Eclipse +Python+Pydev) 1.下载Mac版64位的Eclipse. 进入到Eclipse官方网站的下载页面(http://www.ecli ...
- C++的可移植性和跨平台开发
概述 今天聊聊C++的可移植性问题.如果你平时使用C++进行开发,并且你对C++的可移植性问题不是非常清楚,那么我建议你看看这个系列.即使你目前没有跨平台开发的需要,了解可移植性方面的知识对你还是很有 ...
- Mysql内置功能《一》流程控制
delimiter // CREATE PROCEDURE proc_if () BEGIN declare i int default 0; if i = 1 THEN SELECT 1; ELSE ...
- yaml 配置
yaml文件的作用 yaml是一种直观的能够被电脑识别的的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互. yaml的语法规则 字母大小写敏感: 通过缩进来表示层级关系,同层级元素需左对齐,且 ...
- fdisk 磁盘分区
.[root@test4 ~]# fdisk /dev/sda //对sda磁盘进行分区 Device contains neither a valid DOS partition table, no ...
- “全栈2019”Java第五十四章:多态详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...