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