前言

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. 32 取一个整数a从右端开始的4-7位

    题目:取一个整数a从右端开始的4-7位 public class _032FetchDigit { public static void main(String[] args) { fetchDigi ...

  2. HDU 5977 Garden of Eden (树分治+状态压缩)

    题意:给一棵节点数为n,节点种类为k的无根树,问其中有多少种不同的简单路径,可以满足路径上经过所有k种类型的点? 析:对于路径,就是两类,第一种情况,就是跨过根结点,第二种是不跨过根结点,分别讨论就好 ...

  3. 查看HDFS集群信息

    clusterID:集群ID,必须保持一致 1)在NameNode上查看 cat $HADOOP_HOME/dfs/name/current/VERSION #Fri Apr 18 11:56:57 ...

  4. CSS 学习-文本 段落

    段落. 首行缩进 text-indent属性 比如缩进  <p style="text-indent: 2em;">这里是内容....</p> 这里是内容这 ...

  5. [Lua快速了解一下]Lua的MetaTable和MetaMethod

    MetaTable和MetaMethod是Lua中的重要的语法,MetaTable主要是用来做一些类似于C++重载操作符式的功能. 两个分数 fraction_a = {numerator=, den ...

  6. jmeter - 命令行方式运行

    命令格式: jmeter -n -t <testplan filename> -l <listener filename> 参数说明: -n 非 GUI 模式 -> 在非 ...

  7. .Net Core 自动化部署:使用jenkins部署到linux docker容器运行

    上次我们说到.Net Core 自动化部署:使用docker版jenkins部署dotnetcore应用,这次我们使用jenkins发布我们的.NET Core站点到docker容器中运行,为后面的的 ...

  8. Maximum file handles allowed by OS

    Linux can open 1024 files concurrently by each process by default: http://m.blog.csdn.net/blog/keepe ...

  9. LA 3401

    彩色立方体. [分析] 弄清楚24种状态,可以由标准姿态旋转而来. 计算24种状态: #include <iostream> #include <string> ,,,,, } ...

  10. 贪心——Prim算法(避圈法)

    1.简介 Prim算法是图论中的一种算法,可在带权连通图里搜索产生最小生成树. 该算法于1930年由捷克数学家沃伊捷赫·亚尔尼克(Vojtěch Jarník)发现:并在1957年由美国计算机科学家罗 ...