前言

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批量复制迁移文件夹的更多相关文章

  1. python批量改动指定文件夹文件名称

    这小样例仅仅要是说明用python怎么批量改动指定文件夹的文件名称: 记得要把脚本跟改动的文件放在同一个文件夹下 #encoding:utf-8 import os import sys files ...

  2. 批量复制windows文件夹下所有文件名

    第一步,打开文件夹 第二步,在该文件夹下新建一个txt文件,然后将“.txt”后缀名修改为“.bat” txt文件内容“DIR *.* /B >LIST.TXT” 第三步,双击“.bat”,直接 ...

  3. 利用Python批量重命名文件夹下文件

    #!/usr/bin/python # -*- coding: UTF-8 -*- # -*- coding:utf8 -*- import os from string import digits ...

  4. Python批量复制和重命名文件

    Python批量复制和重命名文件 示例代码 #! /usr/bin/env python # coding=utf-8 import os import shutil import time impo ...

  5. SharePoint 服务器端对象迁移文件夹

    最近有个需求,写个定时迁移文件夹的小程序,因为计时器任务比较繁琐,所以选择了控制台程序.然后,用windows的计划任务执行,也许,会有广大朋友需要类似的功能,简单的分享一下代码逻辑,功能非常简单,希 ...

  6. 基于Python——实现两个文件夹中的文件拷贝

    [背景]当复制一个文件夹中的某文件到另一个文件夹中时是一件很容易的事情,可是如果存在很多文件夹中的文件需要一一拷贝,就会变的很繁琐,稍有不慎就会遗漏,今天就用Python来解决这个问题—— [代码实现 ...

  7. 基于Python——实现解压文件夹中的.zip文件

    [背景]当一个文件夹里存好好多.zip文件需要解压时,手动一个个解压再给文件重命名是一件很麻烦的事情,基于此,今天介绍一种使用python实现批量解压文件夹中的压缩文件并给文件重命名的方法—— [代码 ...

  8. 文件处理工具 gif合成工具 文件后缀批量添加工具 文件夹搜索工具 重复文件查找工具 网页图片解析下载工具等

    以下都是一些简单的免费分享的工具,技术支持群:592132877,提供定制化服务开发. Gif动图合成工具 主要功能是扫描指定的文件夹里的所有zip文件,然后提取Zip文件中的图片,并合成一张gif图 ...

  9. python批量读取txt文件为DataFrame

    我们有时候会批量处理同一个文件夹下的文件,并且希望读取到一个文件里面便于我们计算操作.比方我有下图一系列的txt文件,我该如何把它们写入一个txt文件中并且读取为DataFrame格式呢? 首先我们要 ...

随机推荐

  1. Ubuntu使用tzselect修改时区

    1.命令行运行 sudo tzselect 2.选择洲区(这里选择亚洲Asia) waichung@desktop:~$ sudo tzselect [sudo] password for waich ...

  2. Web环境中Spring的启动过程

    1.spring不但可以在JavaSE环境中应用,在Web环境中也可以广泛应用,Spring在web环境中应用时,需要在应用的web.xml文件中添加如下的配置: …… <context-par ...

  3. 【小梅哥FPGA进阶教程】第十四章 TFT屏显示图片

    十四.TFT屏显示图片 本文由杭电网友曾凯峰贡献,特此感谢 学习了小梅哥的TFT显示屏驱动设计后,想着在此基础上通过TFT屏显示一张图片,有了这个想法就开始动工了.首先想到是利用FPGA内部ROM存储 ...

  4. 洛谷P4234 最小差值生成树(lct动态维护最小生成树)

    题目描述 给定一个标号为从 11 到 nn 的.有 mm 条边的无向图,求边权最大值与最小值的差值最小的生成树. 输入输出格式 输入格式:   第一行两个数 n, mn,m ,表示图的点和边的数量. ...

  5. VCS简介

    VCS -Version Control System 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 特征 1.记录文件的所有历史变化 2.随时可恢复到任何一个历史状 ...

  6. 20145233《网络对抗》Exp5 MSF基础应用

    20145233<网络对抗>Exp5 MSF基础应用 实验问题思考 什么是exploit,payload,encode exploit是发现了的可以利用的安全漏洞或者配置弱点,这类模块存储 ...

  7. Arduino I2C + 温湿度传感器AM2321

    (2015.5.17:本日志的内容有所更新,参见<使用Arduino Wire Library读取温湿度传感器AM2321>.) AM2321是广州奥松电子生产的数字式温湿度传感器.虽是国 ...

  8. jquery实现简单瀑布流

    瀑布流这个概念一直不是很理解,看到别人可以实现,自己弄了很久还是不能实现就很纠结.瀑布流这根刺就一直扎在我心里,一次偶然的机会看到别人实现了瀑布流,我想我是不是也应该再继续把这个未完成的任务画一个圆满 ...

  9. WPF Viewport3D 解决透视模式时窗体模糊

    最近折腾Viewport3D玩,遇到了一些诡异的问题,研究一下略有心得,特此和大家分享~ 三维图形概述: https://msdn.microsoft.com/zh-cn/library/ms7474 ...

  10. ORM概述及常用ORM框架

    一.ORM ORM(Object-relational mapping),即对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.也就是说,ORM是通过使用描述对象和数据库之间映 ...