您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關怎么在python中復制目錄,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
思路:
1.獲得源目錄子級目錄,并設置目標目錄的子級路徑
1.1在此就創建兩個棧(或者隊列),將原目錄和目標目錄分別添加到棧(或者隊列)里面,一般用append添加,加在棧的頂部,隊列的后部
1.2深度遍歷 從棧的頂部取出一個原路徑去判斷,同時用同樣的方式取出目標路徑(棧和隊列都類似于list,都可以用list實現)
廣度遍歷 從隊列的前面取出一個原路徑去判斷,同時用同樣的方式取出目標路徑
2.判斷原子級路徑是否是文件
2.1如果目標子級文件不存在 或者目標子級文件存在,但是子級大小不一致,則復制
3.判斷原子級目錄是否是目錄
3.1.遞歸 調用自己,把自己的子級目錄當作源文件,復制到目標子級目錄
3.2.深度遍歷 廣度遍歷 都將原目錄和目標目錄添加(append)到棧(隊列)的后面'''
# 深度遍歷 廣度遍歷(僅取出來的方式不一樣) # 導入模塊 import os, collections def copyDir(sourcePath,targetPath): # 傳入原目錄,和需要復制后的目標目錄 # 判斷需要復制的目錄是否存在,如果不存在就返回 if not os.path.isdir(sourcePath): return '源目錄不存在' # 創建兩個棧,一個用來存放原目錄路徑,另一個用來存放需要復制的目標目錄 sourceStack = collections.deque() sourceStack.append(sourcePath) targetStack = collections.deque() targetStack.append(targetPath) # 創建一個循環當棧里面位空時結束循環 while True: if len(sourceStack) == 0: break # 將路徑從棧的上部取出 sourcePath = sourceStack.pop() #sourcePath = sourceStack.popleft() # 遍歷出該目錄下的所有文件和目錄 listName = os.listdir(sourcePath) # 將目錄路徑取出來 targetPath = targetStack.pop() #targetPath = targetStack.popleft() # 判斷該目標目錄是否存在,如果不存在就創建 if not os.path.isdir(targetPath): os.makedirs(targetPath) # 遍歷目錄下所有文件組成的列表,判斷是文件,還是目錄 for name in listName: # 拼接新的路徑 sourceAbs = os.path.join(sourcePath, name) targetAbs = os.path.join(targetPath, name) # 判斷是否時目錄 if os.path.isdir(sourceAbs): # 判斷目標路徑是否存在,如果不存在就創建一個 if not os.path.exists(targetAbs): os.makedirs(targetAbs) # 將新的目錄添加到棧的頂部 sourceStack.append(sourceAbs) targetStack.append(targetAbs) # 判斷是否是文件 if os.path.isfile(sourceAbs): # 1.如果目標子級文件不存在 或者目標子級文件存在但是該文件與原子級文件大小不一致 則需要復制 if (not os.path.exists(targetAbs)) or (os.path.exists(targetAbs) and os.path.getsize(targetAbs) != os.path.getsize(targetAbs)): rf = open(sourceAbs, mode='rb') wf = open(targetAbs, mode='wb') while True: # 一點一點讀取,防止當文件較大時候內存吃不消 content = rf.read(1024*1024*10) if len(content) == 0: break wf.write(content) # 寫入緩沖區時候手動刷新一下,可能會加快寫入 wf.flush() # 讀寫完成關閉文件 rf.close() wf.close() # 傳入需要復制的目錄和需要復制到的目標目錄 sPath = "" tPath = "" copyDir(sPath,tPath)
遞歸遍歷:
遞歸思路:
1.定義一個函數來復制目錄,需要傳入原目錄和目標目錄
2.判斷源目錄是否是一個目錄--不是就終止
3.判斷目標目錄是否存在--不存在,新建
4.遍歷源目錄,
import os def copyDir(sourceDir,targetDir): if not os.path.isdir(sourceDir): return "源目錄不存在" if not os.path.exists(targetDir): os.makedirs(targetDir) listName = os.listdir(sourceDir) for name in listName: sourceAbs = os.path.join(sourceDir,name) targetAbs = os.path.join(targetDir,name) if os.path.isdir(sourceAbs): #創建目標目錄 if not os.path.exists(targetAbs): os.makedirs(targetAbs) copyDir(sourceAbs,targetAbs) if os.path.isfile(sourceAbs): # 1.如果目標子級文件不存在 或者 目標子級文件存在但是該文件與原子級文件大小不一致 則需要復制 if (not os.path.exists(targetAbs)) or (os.path.exists(targetAbs) and os.path.getsize(targetAbs) != os.path.getsize(sourceAbs)): rf = open(sourceAbs,mode="rb") wf = open(targetAbs,mode="wb") while True: content = rf.read(1024*1024*10) if len(content) == 0: break wf.write(content) wf.flush() rf.close() wf.close() # 測試 sPath = "" tPath = "" copyDir(sPath,tPath)
以上就是怎么在python中復制目錄,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。