码迷,mamicode.com
首页 > 编程语言 > 详细

Python批量复制迁移数据

时间:2019-03-01 12:27:52      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:das   mda   color   list   文件   app   root   [1]   其他   

前言

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 = rF:\目标源路径\{group_num}.format_map(var()) #里面的文件名均为“数字.文字”,例如“22.广东省李小龙会”
    root2 = rF:\数据源路径\{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 = rF:\目标源路径\{group_num}\{unit_string}\{data_type_longer}\{unit_number}.format_map(var())#目标源的绝对路径
        old_dir_name = rF:\数据源路径\{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 = rF:\目标源路径\{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(rF:\目标源路径\{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 = rF:\目标源路径\{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批量复制迁移数据

标签:das   mda   color   list   文件   app   root   [1]   其他   

原文地址:https://www.cnblogs.com/10sxluo/p/10455457.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!