用Python復(fù)制文件的九種方法
以下是演示“如何在Python中復(fù)制文件”的九種方法。
- shutil copyfile()方法
- shutil copy()方法
- shutil copyfileobj()方法
- shutil copy2()方法
- os popen方法
- os系統(tǒng)()方法
- Thread()方法
- 子進程調(diào)用()方法
- 子進程check_output()方法
1. Shutil Copyfile()方法
該方法只有在目標可寫時才將源的內(nèi)容復(fù)制到目的地。如果您沒有寫入權(quán)限,則會引發(fā)IOError。
它通過打開輸入文件進行閱讀,忽略其文件類型。接下來,它不會對特殊文件進行任何不同的處理,也不會將它們復(fù)制為新的特殊文件。
所述的CopyFile()方法利用較低級別的功能的copyfileobj()的下方。它將文件名稱作為參數(shù),打開它們并將文件句柄傳遞給copyfileobj()。該方法中有一個可選的第三個參數(shù),您可以使用它來指定緩沖區(qū)長度。然后它將打開文件以讀取指定緩沖區(qū)大小的塊。但是,默認行為是一次性讀取整個文件。
以下是有關(guān)copyfile()方法的要點。
- 它將源的內(nèi)容復(fù)制到名為目標的文件。
- 如果目的地不可寫,則復(fù)制操作將導(dǎo)致IOError異常。
- 如果源文件和目標文件都相同,它將返回SameFileError。
- 但是,如果目的地以不同的名稱預(yù)先存在,則副本將覆蓋其內(nèi)容。
- 如果目的地是目錄,則意味著此方法將不會復(fù)制到目錄,將會發(fā)生錯誤13。
- 它不支持復(fù)制文件,如字符或塊設(shè)備和管道。
2. Shutil Copy()方法
copy()方法的功能類似于“CP”在Unix命令。這意味著如果目標是一個文件夾,那么它將在其中創(chuàng)建一個與源文件相同的名稱(basename)的新文件。此外,該方法將復(fù)制其內(nèi)容后將目標文件的權(quán)限與源進行同步。 如果要復(fù)制相同的文件,它也會拋出SameFileError。
3. Shutil Copyfileobj()方法
此方法將文件復(fù)制到目標路徑或文件對象。如果目標是文件對象,則需要在調(diào)用copyfileobj()之后明確關(guān)閉它。它假設(shè)一個可選參數(shù)(緩沖區(qū)大小),您可以使用它來提供緩沖區(qū)長度。這是在復(fù)制過程中保存在內(nèi)存中的字節(jié)數(shù)。系統(tǒng)使用的默認大小為16KB。
4. Shutil Copy2()方法
但是,copy2()方法的功能類似于copy()。但是,在復(fù)制數(shù)據(jù)的同時,也可以在元數(shù)據(jù)中添加訪問和修改時間。復(fù)制同一個文件會導(dǎo)致SameFileError。
對于好奇 – Copymode()與Copystat()之間的區(qū)別。
5. Os Popen()方法
該方法創(chuàng)建一個指向或來自該命令的管道。它返回一個連接到管道的打開的文件對象。您可以根據(jù)文件打開模式(即’r’(默認)或’w’)使用它進行讀取或?qū)懭搿?/p>
- 模式 –它可以是’r’(默認)或’w’。
- bufsize –如果其值為0,則不會發(fā)生緩沖。如果設(shè)置為1,則在訪問文件時將進行行緩沖。如果您提供的值大于1,則緩沖將以指定的緩沖區(qū)大小進行。但是,對于負值,系統(tǒng)將采用默認緩沖區(qū)大小。
對于Windows操作系統(tǒng)。
對于Linux操作系統(tǒng)。
6. Os System()方法
它是運行任何系統(tǒng)命令的最常見方式。使用system()方法,可以在subshell中調(diào)用任何命令。在內(nèi)部,這種方法會調(diào)用標準的C庫函數(shù)。
此方法返回命令的退出狀態(tài)。
對于Windows操作系統(tǒng)。
對于Linux操作系統(tǒng)。
7.以Async方式使用線程庫的Python文件復(fù)制
如果要以異步方式復(fù)制文件,請使用以下方法。在這里,我們使用Python的線程模塊在后臺運行復(fù)制操作。
使用此方法時,請確保采用鎖定以避免死鎖。如果您的應(yīng)用程序正在使用多個線程讀取/寫入文件,您可能會面對它。
8.使用子進程的Call()方法在Python中復(fù)制一個文件
子進程模塊提供了一個簡單的界面來處理子進程。它使我們能夠啟動子進程,附加到其輸入/輸出/錯誤管道,并檢索返回值。
子流程模塊旨在替代傳統(tǒng)模塊和功能,如os.system,os.spawn *,os.popen *,popen2。*。
它公開一個call()方法來調(diào)用系統(tǒng)命令來執(zhí)行用戶任務(wù)。
9.使用子進程的Check_output()方法在Python中復(fù)制文件
使用子進程的check_output()方法,可以運行外部命令或程序并捕獲其輸出。它還支持管道。