中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在python中復制目錄

發布時間:2021-04-17 16:22:08 來源:億速云 閱讀:589 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關怎么在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中復制目錄,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

玛纳斯县| 靖边县| 天气| 九龙城区| 资讯| 梁山县| 台中市| 泸西县| 合山市| 凤凰县| 论坛| 柘荣县| 锡林浩特市| 雅江县| 乌拉特中旗| 阿拉善右旗| 全州县| 阳朔县| 砚山县| 吉木萨尔县| 阜南县| 海林市| 永春县| 吴江市| 即墨市| 襄樊市| 太湖县| 宜都市| 五台县| 哈巴河县| 眉山市| 湘阴县| 卢龙县| 新龙县| 门头沟区| 卓尼县| 津市市| 会宁县| 娄底市| 西城区| 吉林市|