Python批量复制迁移数据
Posted 蛋挞王子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(‘ ‘) print(‘ ‘) print(‘___________在{group_num}中____________‘.format_map(var())) for unit in list0: if os.path.isdir(r‘F:目标源路径{group_num}{unit}‘.format_map(var())):#判断是否一个文件夹,因为有其他文件中里面 print(‘ ‘) 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批量复制迁移数据的主要内容,如果未能解决你的问题,请参考以下文章