Python批量複製遷移文件夾

前言

Python能夠利用shutil庫進行對文件夾,文件的遷移。而在本次的實踐當中,難點在於目標文件夾的名稱和數據源文件夾的名稱,須要利用app

工做單位提供的中間數據去進行對比鏈接起來。編碼

例如:目標源的文件夾叫作,「1.臺協辦」。而數據源的文件夾叫作「103_廣東省臺協辦委員會」。而他們中間的數據叫「103臺協辦」。spa

經過目標源的文字部分,鏈接中間數據,再用中間數據的數字編碼部分,鏈接數據源的文件夾名稱。code

思路:經過生成器生成三個列表,將須要的數據進行拆分,而後去對比每一個數據。最後將符合要求的文件名留下,用於絕對路徑的組成,進行文件複製遷移。orm


 

複製遷移的代碼

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)

目標源的絕對路徑組成是:\組名\單位名稱\數據類型\遷移的文件夾名稱blog

數據源的絕對路徑組成是:\數據類型\遷移的文件夾名稱字符串

執行成功string


檢查的腳本

由於須要檢查目標源裏面的文件夾哪一個是空的,就是沒有匹配到合適的數據源文件,因此寫了一個檢查腳本。it

 

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
相關文章
相關標籤/搜索