Python3批量移動(dòng)指定文件到指定文件夾方法示例
引言
某人需求:以某excel中姓名信息為名建立一系列文件夾,分別將四個(gè)文件夾中與人名對(duì)應(yīng)的文件匯總到該人名對(duì)應(yīng)的文件夾中,共近200人,手工處理費(fèi)時(shí)費(fèi)力。
需求分解:
從excel中提取代號(hào)index和姓名信息name
以index_name格式批量建立文件夾namefolder
分別遍歷四個(gè)文件夾及其子文件夾,將其中“文件名filename中包含姓名name”的文檔移動(dòng)到該人對(duì)應(yīng)的新建的文件夾namefolder中
excel內(nèi)容:
處理前:
處理后:
功能實(shí)現(xiàn)比較容易,權(quán)當(dāng)記錄。
環(huán)境:Python3.6+macOS10.12.5
代碼
# -*- coding: utf-8 -*- import os import shutil import xlrd import string ### 創(chuàng)建多層目錄 def mkdirs(path): # 去除首位空格 path = path.strip() # 去除尾部 \ 符號(hào) path = path.rstrip("\\") # 判斷路徑是否存在 # 存在 True # 不存在 False isExists = os.path.exists(path) # 判斷結(jié)果 if not isExists: # 創(chuàng)建目錄操作函數(shù) os.makedirs(path) # 如果不存在則創(chuàng)建目錄 print(path + ' 創(chuàng)建成功') return True else: # 如果目錄存在則不創(chuàng)建,并提示目錄已存在 print(path + ' 目錄已存在') return False def search_file(path, filename, newpath): queue = [] queue.append(path); while len(queue) > 0: tmp = queue.pop(0) if (os.path.isdir(tmp)):#如果該路徑是文件夾 for item in os.listdir(tmp):#遍歷該路徑中文件和文件夾 queue.append(os.path.join(tmp, item))#將所得路徑加入隊(duì)列queue elif (os.path.isfile(tmp)):#如果該路徑是文件 name = os.path.basename(tmp) # 獲取文件名 dirname = os.path.dirname(tmp) # 獲取文件目錄 full_path = os.path.join(dirname, name) # 將文件名與文件目錄連接起來,形成完整路徑 des_path = newpath+'/'+path+'_'+name #目標(biāo)路徑,將該文件夾信息添加進(jìn)最后的文件名中 if filename in name:#匹配符合條件的文件,也可用if(name.find(filename)!=-1): shutil.move(full_path, des_path)#移動(dòng)文件到目標(biāo)路徑(移動(dòng)+重命名) if __name__ == '__main__': #打開excel文件 data=xlrd.open_workbook('名單.xlsx') #獲取第一張工作表(通過索引的方式) table=data.sheet_by_index(0) #datalist用來存放數(shù)據(jù) datalist_UNIQID=[] datalist_NAME=[] #將table中第一行的數(shù)據(jù)讀取并添加到data_list中 datalist_UNIQID.extend(table.col_values(0)) datalist_NAME.extend(table.col_values(2)) #foldname = [a+'_'+b for a, b in zip(datalist_UNIQID,datalist_NAME)] dir_tjbg='zzz報(bào)告' dir_fsgz='xxx證書' dir_hbpx='yyy證書' dir_ykfs='xyz證書' #打印出第一行的全部數(shù)據(jù) for index, name in zip(datalist_UNIQID, datalist_NAME): foldername=index+'_'+name.strip() #print(foldername) mkdirs(foldername) search_file(dir_tjbg,name.strip(),foldername) search_file(dir_fsgz,name.strip(),foldername) search_file(dir_hbpx,name.strip(),foldername) search_file(dir_ykfs,name.strip(),foldername)
備忘
1. 同步遍歷兩個(gè)list
l1 = [2,2,2,2] l2 = [3,3,3,3] prod = [a*b for a, b in zip(l1,l2)] print prod # [6, 6, 6, 6] add = [a+b for a, b in zip(l1,l2)] print add # [5, 5, 5, 5]
2. 文件夾操作
import os import shutil os.getcwd() # 獲取當(dāng)前工作目錄,非腳本目錄 os.listdir() # 返回指定目錄下的所有文件和目錄,非遞歸 os.remove() # 刪除文件 os.removedirs() #刪除目錄 os.path.isfile() # 檢驗(yàn)給出的路徑是否是一個(gè)文件 os.path.isdir() # 檢驗(yàn)給出的路徑是否是一個(gè)目錄 os.path.isabs() # 判斷是否是絕對(duì)路徑 os.path.exists() # 檢驗(yàn)給出的路徑是否真實(shí)存在 os.path.split() # 返回一個(gè)路徑的目錄名和文件名 os.path.splitext() # 分離文件擴(kuò)展名 os.path.dirname() # 獲取文件路徑名 os.path.basename() # 獲取一個(gè)絕對(duì)路徑下的文件名 os.system() # 運(yùn)行shell命令 os.rename(old,new) # 重命名文件或目錄 os.makedirs(r"c:\python\test") # 創(chuàng)建多級(jí)目錄 os.mkdir("test") # 創(chuàng)建單個(gè)目錄 os.exit() # 終止當(dāng)前進(jìn)程 os.path.getsize(filename) # 獲取文件大小 os.mknod("test.txt") # 創(chuàng)建空文件 shutil.copyfile("oldfile","newfile") # oldfile和newfile都只能是文件 shutil.copytree("olddir","newdir") # olddir和newdir都只能是目錄,且newdir必須不存在 shutil.move("oldpos","newpos") # 移動(dòng)文件或目錄 shutil.rmtree("dir") # 刪除目錄,與os.removedirs()相同 os.path.join(“home”, "me", "mywork") # 路徑連接
參考
- Python3 操作Excel文件(讀寫)
- Python操作excel的幾種方式–xlrd、xlwt、openpyxl(部分函數(shù)不適用于python3,如column_values改為col_values)
- Python中zip()函數(shù)用法舉例
- python腳本初體驗(yàn)之一鍵移動(dòng)自定格式文件
- 每天一個(gè)python模塊之文件目錄操作-os以及shutil模塊
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
python 簡(jiǎn)單照相機(jī)調(diào)用系統(tǒng)攝像頭實(shí)現(xiàn)方法 pygame
今天小編就為大家分享一篇python 簡(jiǎn)單照相機(jī)調(diào)用系統(tǒng)攝像頭實(shí)現(xiàn)方法 pygame,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08Python實(shí)現(xiàn)輕松找出兩個(gè)列表不同之處
在日常編程中,需要比較兩個(gè)列表并找出它們之間差異是一種常見需求,在本文中,我們將深入探討Python中查找兩個(gè)列表差異值的方法,需要的小伙伴可以參考下2023-12-12Django中反向生成models.py的實(shí)例講解
今天小編就為大家分享一篇Django中反向生成models.py的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05對(duì)python讀取zip壓縮文件里面的csv數(shù)據(jù)實(shí)例詳解
今天小編就為大家分享一篇對(duì)python讀取zip壓縮文件里面的csv數(shù)據(jù)實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02如何利用Python獲取文本中的電話號(hào)碼實(shí)例代碼
Python的文本處理是經(jīng)常碰到的一個(gè)問題,下面這篇文章主要給大家介紹了關(guān)于如何利用Python獲取文本中的電話號(hào)碼的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09