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格式呢? 首先我们要 ...
随机推荐
- JavaScript词法作用域经典练习题
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- 敏捷开发之XP
敏捷方法论有一个共同的特点,那就是都将矛头指向了“文档”,它们认为传统的软件工程方法文档量太“重”了,称为“重量级”方法,而相应的敏捷方法则是“轻量级”方法.正是因为“轻量级”感觉没有什么力量,不但不 ...
- 20160214 2016-2017-2 实验二《Java面向对象》实验报告
实验二 面向对象程序设计 (一)单元测试 写一段关于分数标准的代码,如下: public class MyUtil{ public static String percentage2fivegrade ...
- getField
model.getField(field, num) field {String} 字段名,多个字段用逗号隔开 num {Boolean | Number} 需要的条数 return {Promise ...
- Android-事务(Transaction)
事务就拿转帐的例子来说:两个用户,要么都成功,要么都失败,这样才是安全
- C/C++文件输入输出流
C++方式 C方式 头文件 fstream stdio.h open file.open(const char *filename,const char *mode) FILE* fo ...
- mvc4开篇之BundleConfig(1)
新建一个mvc4默认项目,会看到以下目录 打开App_start 里面BundleConfig.cs文件 你会看到这么一段话: 有关 Bundling 的详细信息,请访问 http://go.micr ...
- 为微软ContosoUniversity例子加上学生自选课程计划
把ContosoUniversity例子过了一遍,好象还是有很多东西未能理解,决定自己随便加个功能看可以自己完成不.... 从github的例子中clone下来ContosoUniversity项目, ...
- 【Selenium专题】WebDriver启动firefox浏览器
firefox浏览器不需要下载驱动,原生支持,以下是代码运行环境,firefox启动封装在方法startFirefox()中 import org.openqa.selenium.WebDriver; ...
- Linux centos 6.4安装
Linux系统安装: 开启虚拟机: 界面说明:Install or upgrade an existing system 安装或升级现有的系统install system with basic vid ...