欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python 實現(xiàn)目錄復(fù)制的三種小結(jié)

 更新時間:2019年12月04日 16:38:09   作者:weixin_42269099  
今天小編就為大家分享一篇python 實現(xiàn)目錄復(fù)制的三種小結(jié),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

復(fù)制目錄: 包含多層子目錄

方法: 遞歸, 深度遍歷,廣度遍歷

深度遍歷&廣度遍歷:

思路:

1.獲得源目錄子級目錄,并設(shè)置目標目錄的子級路徑

1.1在此就創(chuàng)建兩個棧(或者隊列),將原目錄和目標目錄分別添加到棧(或者隊列)里面,一般用append添加,加在棧的頂部,隊列的后部

1.2深度遍歷 從棧的頂部取出一個原路徑去判斷,同時用同樣的方式取出目標路徑(棧和隊列都類似于list,都可以用list實現(xiàn))

廣度遍歷 從隊列的前面取出一個原路徑去判斷,同時用同樣的方式取出目標路徑

2.判斷原子級路徑是否是文件

2.1如果目標子級文件不存在 或者目標子級文件存在,但是子級大小不一致,則復(fù)制

3.判斷原子級目錄是否是目錄

3.1.遞歸 調(diào)用自己,把自己的子級目錄當作源文件,復(fù)制到目標子級目錄

3.2.深度遍歷 廣度遍歷 都將原目錄和目標目錄添加(append)到棧(隊列)的后面'''

# 深度遍歷 廣度遍歷(僅取出來的方式不一樣)
# 導(dǎo)入模塊
import os, collections
 
def copyDir(sourcePath,targetPath):
  # 傳入原目錄,和需要復(fù)制后的目標目錄
  # 判斷需要復(fù)制的目錄是否存在,如果不存在就返回
  if not os.path.isdir(sourcePath):
    return '源目錄不存在'
  # 創(chuàng)建兩個棧,一個用來存放原目錄路徑,另一個用來存放需要復(fù)制的目標目錄
  sourceStack = collections.deque()
  sourceStack.append(sourcePath)
 
  targetStack = collections.deque()
  targetStack.append(targetPath)
  # 創(chuàng)建一個循環(huán)當棧里面位空時結(jié)束循環(huán)
  while True:
    if len(sourceStack) == 0:
      break
    # 將路徑從棧的上部取出
    sourcePath = sourceStack.pop() #sourcePath = sourceStack.popleft()
    # 遍歷出該目錄下的所有文件和目錄
    listName = os.listdir(sourcePath)
 
    # 將目錄路徑取出來
    targetPath = targetStack.pop() #targetPath = targetStack.popleft()
    # 判斷該目標目錄是否存在,如果不存在就創(chuàng)建
    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):
        # 判斷目標路徑是否存在,如果不存在就創(chuàng)建一個
        if not os.path.exists(targetAbs):
          os.makedirs(targetAbs)
        # 將新的目錄添加到棧的頂部
        sourceStack.append(sourceAbs)
        targetStack.append(targetAbs)
      # 判斷是否是文件
      if os.path.isfile(sourceAbs):
        # 1.如果目標子級文件不存在 或者目標子級文件存在但是該文件與原子級文件大小不一致 則需要復(fù)制
        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:
            # 一點一點讀取,防止當文件較大時候內(nèi)存吃不消
            content = rf.read(1024*1024*10)
            if len(content) == 0:
              break
            wf.write(content)
            # 寫入緩沖區(qū)時候手動刷新一下,可能會加快寫入
            wf.flush()
          # 讀寫完成關(guān)閉文件
          rf.close()
          wf.close()
# 傳入需要復(fù)制的目錄和需要復(fù)制到的目標目錄
sPath = ""
tPath = ""
copyDir(sPath,tPath)

遞歸遍歷:

遞歸思路:

1.定義一個函數(shù)來復(fù)制目錄,需要傳入原目錄和目標目錄

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):
 
    #創(chuàng)建目標目錄
 
    if not os.path.exists(targetAbs):
 
      os.makedirs(targetAbs)
 
    copyDir(sourceAbs,targetAbs)
 
  if os.path.isfile(sourceAbs):
 
  # 1.如果目標子級文件不存在 或者 目標子級文件存在但是該文件與原子級文件大小不一致 則需要復(fù)制
 
    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 實現(xiàn)目錄復(fù)制的三種小結(jié)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • python列表:開始、結(jié)束、步長值實例

    python列表:開始、結(jié)束、步長值實例

    這篇文章主要介紹了python列表:開始、結(jié)束、步長值實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python文件打包工具一站式指南

    Python文件打包工具一站式指南

    這篇文章主要為大家介紹了Python文件打包工具一站式指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Python自動生成代碼 使用tkinter圖形化操作并生成代碼框架

    Python自動生成代碼 使用tkinter圖形化操作并生成代碼框架

    這篇文章主要為大家詳細介紹了Python自動生成代碼,使用tkinter圖形化操作并生成代碼框架,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • python 字典套字典或列表的示例

    python 字典套字典或列表的示例

    今天小編就為大家分享一篇python 字典套字典或列表的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • python中使用正則表達式的方法詳解

    python中使用正則表達式的方法詳解

    這篇文章主要為大家詳細介紹了python中使用正則表達式的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • python小項目之五子棋游戲

    python小項目之五子棋游戲

    這篇文章主要為大家詳細介紹了python小項目之五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • python使用os.listdir和os.walk獲得文件的路徑的方法

    python使用os.listdir和os.walk獲得文件的路徑的方法

    本篇文章主要介紹了python使用os.listdir和os.walk獲得文件的路徑的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • NumPy 矩陣乘法的實現(xiàn)示例

    NumPy 矩陣乘法的實現(xiàn)示例

    這篇文章主要介紹了NumPy 矩陣乘法的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python神經(jīng)網(wǎng)絡(luò)使用Keras構(gòu)建RNN訓(xùn)練

    python神經(jīng)網(wǎng)絡(luò)使用Keras構(gòu)建RNN訓(xùn)練

    這篇文章主要為大家介紹了python神經(jīng)網(wǎng)絡(luò)使用Keras構(gòu)建RNN網(wǎng)絡(luò)訓(xùn)練,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2022-05-05
  • Python編程快速上手——Excel到CSV的轉(zhuǎn)換程序案例分析

    Python編程快速上手——Excel到CSV的轉(zhuǎn)換程序案例分析

    這篇文章主要介紹了Python Excel到CSV的轉(zhuǎn)換程序,結(jié)合具體案例形式分析了Python操作Excel到CSV轉(zhuǎn)換的操作技巧與相關(guān)注意事項,需要的朋友可以參考下
    2020-02-02

最新評論