用Python複製文件的9個方法

2021-03-02 我愛學Python

python 中有許多「開蓋即食」的模塊(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在這篇文章中,你將會看到一些用 Python 實現文件複製的特殊方法。下面我們開始學習這九種不同的方法來實現 Python 複製文件操作。

在開始之前,你必須明白為什麼了解最適合你的 Python 複製文件方法是如此重要。這是因為文件 I/O 操作屬於 性能密集型 而且 經常會達到瓶頸 。這就是為什麼你應該根據你的應用程式的設計選擇最好的方法。

一些共享資源的程序會傾向於以阻塞模式來複製文件,而有些則可能希望以異步方式執行。比如 — 使用線程來複製文件或者啟動單獨的進程來實現它。還有一點需要考慮的是平臺的可移植性。這意味著你應該知道你要運行的程序所在的目標作業系統(Windows/Linux/Mac OS X 等)。

用 Python 複製文件的 9 種方法具體是:

1.Shutil Copyfile()方法

只有當目標是可寫的,這個方法才會將源內容複製到目標位置。如果你沒有寫入權限,則會導致 IOError 異常。

它會打開輸入文件進行讀取並忽略其文件類型。接下來,它不會以任何不同的方式處理特殊文件,也不會將它們複製為新的特殊文件。

Copyfile() 方法使用下面的低級函數 copyfileobj()。它將文件名作為參數,打開它們並將文件句柄傳遞給 copyfileobj()。這個方法中有一個可選的第三個參數,你可用它來指定緩衝區長度。然後它會打開文件並讀取指定緩衝區大小的塊。但是,默認是一次讀取整個文件。

以下是關於 copyfile() 方法的要點。

它將源內容複製到目標文件中。

如果目標文件不可寫入,那麼複製操作將導致 IOError 異常。

如果源文件和目標文件都相同,它將會返回 SameFileError。

但是,如果目標文件之前有不同的名稱,那麼該副本將會覆蓋其內容。

如果目標是一個目錄,這意味著此方法不會複製到目錄,那麼會發生 Error 13。

它不支持複製諸如字符或塊驅動以及管道等文件。

2.Shutil Copy()方法

copy() 方法的功能類似於 Unix 中的「cp」命令。這意味著如果目標是一個文件夾,那麼它將在其中創建一個與源文件具有相同名稱(基本名稱)的新文件。此外,該方法會在複製源文件的內容後同步目標文件權限到源文件。

copy() vs copyfile() :

copy() 還可以在複製內容時設置權限位,而 copyfile() 只複製數據。

如果目標是目錄,則 copy() 將複製文件,而 copyfile() 會失敗,出現 Error 13。

有趣的是,copyfile() 方法在實現過程中使用 copyfileobj() 方法,而 copy() 方法則是依次使用 copyfile() 和 copymode() 函數。

在 Potion-3 可以很明顯看出 copyfile() 會比 copy() 快一點,因為後者會有一個附加任務(保留權限)。

3.Shutil Copyfileobj()方法

該方法將文件複製到目標路徑或者文件對象。如果目標是文件對象,那麼你需要在調用 copyfileobj() 之後關閉它。它還假定了一個可選參數(緩衝區大小),你可以用來設置緩衝區長度。這是複製過程中保存在內存中的字節數。系統使用的默認大小是 16KB。

4.Shutil Copy2()方法

雖然 copy2() 方法的功能類似於 copy()。但是它可以在複製數據時獲取元數據中添加的訪問和修改時間。複製相同的文件會導致 SameFileError 異常。

copy() vs copy2() :

copy() 只能設置權限位,而 copy2() 還可以使用時間戳來更新文件元數據。

copy() 在函數內部調用 copyfile() 和 copymode(), 而 copy2() 是調用 copystat() 來替換copymode()。

5.Os Popen()方法

該方法創建一個發送或者接受命令的管道。它返回一個打開的並且連接管道的文件對象。你可以根據文件打開模式將其用於讀取或者寫入比如『r』(默認)或者『w』。

mode – 它可以是『r』(默認)或者『w』

Bufsize – 如果它的值是0,那麼就不會出現緩衝。如果將它設置為1,那麼在訪問文件時就會發生行緩衝。如果你提供一個大於1的值,那麼就會在指定緩衝區大小的情況下發生緩衝。但是,對於負值,系統將採用默認緩衝區大小。

6.Os System()方法

這是運行任何系統命令的最常用方式。使用 system() 方法,你可以調用 subshell 中的任何命令。在內部,該方法將調用 C 語言的標準庫函數。

該方法返回該命令的退出狀態。

對於 Windows 系統:

對於 Liunx 系統:

7.使用異步方式的線程庫複製文件

如果你想以異步方式複製文件,那麼使用下面的方法。在這裡,我們使用 Python 的線程模塊在後臺進行複製操作。

在使用這種方法時,請確保使用鎖定以避免鎖死。如果你的應用程式使用多個線程讀取/寫入文件,就可能會遇到這種情況。

8.使用Subprocess的Call()方法複製文件

Subprocess 模塊提供了一個簡單的接口來處理子進程。它讓我們能夠啟動子進程,連接到子進程的輸入/輸出/錯誤管道,並檢索返回值。

subprocess 模塊旨在替換舊版模塊和函數,比如 – os.system, os.spawn*, os.popen*, popen2.*

它使用 call() 方法調用系統命令來執行用戶任務。

9.使用 subprocess 中的 Check_output() 方法複製文件

使用 subprocess 中的 Check_output() 方法,你可以運行外部命令或程序並捕獲其輸出。它也支持管道。

相關焦點

  • 如何在Visual Studio調整python可啟動文件
    >python類和對象在Visual Studio開發工具中,創建python應用程式,默認有個python文件,這個為主啟動文件;如果再創建一個python文件,想要運行這個文件,需要將其設置為主啟動文件,就可以調試了。
  • Python:複製文件
    Python提供了很多內置函數,可以使用Operating System Shell程序輕鬆地複製文件,以下命令實現文件複製:
  • 一文看懂Python對文件和文件夾的操作: 含os, shutil和glob模塊.Python學習面試必讀.
    在利用Python或Django從事Web開發時除了必須要了解Python面向對象的編程思想,還必須熟練掌握對文件夾和文件的操作。小編我精心準備了個小結,教你如何利用python進行基本的文件和文件夾操作,並重點介紹了如何使用os, shutil和glob模塊進行常見的文件和文件夾操作,如遍歷,刪除文件和查找文件。
  • Python讀入文件報錯的處理方法
    文章導讀:本文主要 解決python在讀入文件時的報錯:ParserError:Error tokenizing data.C error:Expected x fields in line nnn,saw y。文章分為兩部分,第一部分解釋報錯的意思,定位原因;第二部分給出解決方法。
  • 14-用Python 讀寫 Excel 文件
    >數據量很小,或者願意等待僅在 Windows 中使用XlsxWriter[9]Xlsx是python用來構造xlsx文件的模塊,可以向excel2007+中寫text,numbers,formulas 公式以及hyperlinks超連結。
  • python讀寫文件
    今天我們就以這幾個需求為背景來看看python是如何讀寫文件的。基本概念介紹我們知道python中一切都是對象,「文件」也不例外。下面的實驗可以看出文件是名叫『_io.TextIOWrapper』的class。
  • python命令是如何操作文件file的?
    前言無論哪一個作業系統,亦或是哪一門語言,當使用到一些高級層次的時候,必然會和文件打交道,因為所有的內容不可能都在內存中存儲和傳輸。用到文件,就必然會有創建文件、打開文件、寫文件、複製文件、刪除文件這些操作,下面我們來看看在python中是如何利用命令來操作file文件的。
  • 實例15:用Python批量轉換doc文件為docx文件
    然後就可以讓python-docx模塊盡情發揮了。手動另存為,需要逐個打開doc文件,然後點擊「文件」->「另存為」,在彈出的「另存為」對話框中,將「保存類型」選擇為「.docx」類型,然後保存。如果有100個文件,那得操作100次,很費時間。
  • 從0開始學python-6.2 用python讀寫文件
    上節課我們學習了什麼文件系統,文件樹的組成結構是什麼樣的。我們還學習了用python來查找、重命名一個文件。這節課,我們一起學習一下怎麼用python操作一個文件的內容。文件操作對一個文件,我們可以1)讀取裡面的內容、2)往文件裡寫內容、3)追加文件內容。我們來看看用python怎麼做這些事情。打開文件在對文件內容操作之前,我們首先要打開文件。我們可以使用open函數打開文件,看代碼:file = open('.
  • Python 文件與目錄操作方法總結
    第 4 行是在 sub_dir 中創建 file1.py 和 file2.py,最後一行使用擴展創建所有其他文件。 要了解有關 shell 擴展的更多信息,請訪問此站點。使用字符串方法Python 有幾種用於修改和操作字符串的內置方法。當您在文件名中使用搜索模式時,其中兩個方法.startswith() 和.endswith()非常有用。
  • 用 Python 高效智能管理文件夾
    硬碟讀寫速度越快越好,同理,好的筆記方法要能快速記錄,方便查詢,和結構化展示。現在市場上幾乎沒有集3個優點合一的筆記方法。要麼是寫入太麻煩,要麼是查找不方便,能夠結構化展示內容的更少。三、高效管理文件夾的方法,就是最好的筆記要快速記錄筆記,最好的方法就是讓程序自動做」筆記」。把自己曾經做過的事情,按結構存放於各個文件夾中,自然就做成自己的知識樹了。
  • 使用Python下載文件的簡單示例
    然後,我們使用請求模塊的get方法來獲取URL。在get方法中,我們設置allow_redirects到True,這將允許在URL中重定向,而重定向後的內容將分配給變量myfile.最後,我們打開一個文件來編寫獲取的內容。
  • 巧用python win32com模塊操作excel文件
    小爬最近就遇到這樣一個自動化場景:先利用python爬蟲的方法,獲取到伺服器端的多個excel文件,然後對這些excel文件進行跨表操作,單純的VBA實現起來比較繁瑣,用python和VBA各實現一部分不利於腳本的封裝,割裂感較強。
  • n種方式教你用python讀寫excel等數據文件
    點擊上方「濤哥聊Python」,選擇「星標」公眾號重磅乾貨,第一時間送達來源:Python大數據分析python處理數據文件的途徑有很多種,可以操作的文件類型主要包括文本文件(csv、txt、json等)、excel
  • 用Python寫個在線Python的網站怎麼樣
    前幾天,一個朋友提出了一個建議,如何用python寫出python的解釋器,我感覺這是一個很好的問題,於是就去看看,打算用python寫一個試試
  • n種方式教你用Python讀寫Excel等數據文件
    下面整理下python有哪些方式可以讀寫數據文件。1. read、readline、readlinesread()  :一次性讀取整個文件內容。推薦使用read(size)方法,size越大運行時間越長readline()  :每次讀取一行內容。
  • 慢步python,說說import,引用功能代碼(功能庫、py文件代碼)
    筆者可以直接複製之前寫的代碼,這是最笨的,對於重複次數不多的代碼來說,也是有效的。但如果一個功能代碼重複使用的次數特別多,這樣做就特別複雜了。那麼import的價值就出來了,比如引用time庫,就可以在程序內使用time庫裡面的功能代碼。
  • python文件讀寫的基本操作
    創建一個文件使用電腦創建一個文件非常簡單,滑鼠右鍵新建就可以搞定,用程序創建也非常簡單,下面一行代碼就搞定。>解釋:用記事本打開文件發現裡面多了一行文字,這就是剛剛我們寫進去的內容,通常打開文件後最後不再使用了還需要將其關閉。
  • Python讀寫文件open的使用解讀
    文件打開 open()和操作方法python 讀取文件自帶方法 open,適用於可以用記事本 txt 格式打開的文件,都可以用 open 方法打開2   python 打開文件>兩種方式的區別是第一種打開方式需要跟上 close()方法關閉文件,第二種打開方式不需要跟上 close()方法關閉文件,文件可以安全退出
  • 文件俠告訴你,Python複製文件的N種姿勢!
    API,但和複製文件沒有直接關係啊!區別只是一次性讀取了文件中的所有內容,換湯不換藥啊!於是,我又啟發這位同學,我希望用一行代碼搞定,are you ok?Python中至少有3個模塊提供了複製文件的函數,這3個模塊是shutil、os和subprocess。其中shutil模塊提供的是純的複製文件的函數,而os和subprocess並未直接提供複製文件的函數,而是提供了執行系統命令的函數,通過系統命令可以間接複製文件,例如macOS和Linux的cp命令用於複製文件,而Windows的copy命令用於複製文件。