最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python復(fù)制文件的9個(gè)方法小結(jié)

 更新時(shí)間:2025年01月17日 09:44:31   作者:Python熱愛者  
本文主要介紹了Python復(fù)制文件的9個(gè)方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Python 中有許多“開蓋即食”的模塊(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在這篇文章中,你將會看到一些用 Python 實(shí)現(xiàn)文件復(fù)制的特殊方法。下面我們開始學(xué)習(xí)這九種不同的方法來實(shí)現(xiàn) Python 復(fù)制文件操作。

在開始之前,你必須明白為什么了解最適合你的 Python 復(fù)制文件方法是如此重要。這是因?yàn)槲募?I/O 操作屬于性能密集型而且經(jīng)常會達(dá)到瓶頸。這就是為什么你應(yīng)該根據(jù)你的應(yīng)用程序的設(shè)計(jì)選擇最好的方法。

一些共享資源的程序會傾向于以阻塞模式來復(fù)制文件,而有些則可能希望以異步方式執(zhí)行。比如 — 使用線程來復(fù)制文件或者啟動單獨(dú)的進(jìn)程來實(shí)現(xiàn)它。還有一點(diǎn)需要考慮的是平臺的可移植性。這意味著你應(yīng)該知道你要運(yùn)行的程序所在的目標(biāo)操作系統(tǒng)(Windows/Linux/Mac OS X 等)。

用 Python 復(fù)制文件的 9 種方法具體是:

  • shutil copyfile() 方法
  • shutil copy() 方法
  • shutil copyfileobj() 方法
  • shutil copy2() 方法
  • os popen 方法
  • os system() 方法
  • threading Thread() 方法
  • subprocess call() 方法
  • subprocess check_output() 方法

1.Shutil Copyfile()方法

只有當(dāng)目標(biāo)是可寫的,這個(gè)方法才會將源內(nèi)容復(fù)制到目標(biāo)位置。如果你沒有寫入權(quán)限,則會導(dǎo)致 IOError 異常。

它會打開輸入文件進(jìn)行讀取并忽略其文件類型。接下來,它不會以任何不同的方式處理特殊文件,也不會將它們復(fù)制為新的特殊文件。

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

copyfile(source_file, destination_file)

以下是關(guān)于 copyfile() 方法的要點(diǎn)。

它將源內(nèi)容復(fù)制到目標(biāo)文件中。

如果目標(biāo)文件不可寫入,那么復(fù)制操作將導(dǎo)致 IOError 異常。

如果源文件和目標(biāo)文件都相同,它將會返回 SameFileError。

但是,如果目標(biāo)文件之前有不同的名稱,那么該副本將會覆蓋其內(nèi)容。

如果目標(biāo)是一個(gè)目錄,這意味著此方法不會復(fù)制到目錄,那么會發(fā)生 Error 13。

它不支持復(fù)制諸如字符或塊驅(qū)動以及管道等文件。

# Python Copy File - Sample Code

from shutil import copyfile
from sys import exit

source = input("Enter source file with full path: ")
target = input("Enter target file with full path: ")

# adding exception handling
try:
   copyfile(source, target)
except IOError as e:
   print("Unable to copy file. %s" % e)
   exit(1)
except:
   print("Unexpected error:", sys.exc_info())
   exit(1)

print("\nFile copy done!\n")

while True:
   print("Do you like to print the file ? (y/n): ")
   check = input()
   if check == 'n':
       break
   elif check == 'y':
       file = open(target, "r")
       print("\nHere follows the file content:\n")
       print(file.read())
       file.close()
       print()
       break
   else:
       Continue

2.Shutil Copy()方法

copyfile(source_file, [destination_file or dest_dir])

copy() 方法的功能類似于 Unix 中的“cp”命令。這意味著如果目標(biāo)是一個(gè)文件夾,那么它將在其中創(chuàng)建一個(gè)與源文件具有相同名稱(基本名稱)的新文件。此外,該方法會在復(fù)制源文件的內(nèi)容后同步目標(biāo)文件權(quán)限到源文件。

import os
import shutil

source = 'current/test/test.py'
target = '/prod/new'

assert not os.path.isabs(source)
target = os.path.join(target, os.path.dirname(source))

# create the folders if not already exists
os.makedirs(target)

# adding exception handling
try:
   shutil.copy(source, target)
except IOError as e:
   print("Unable to copy file. %s" % e)
except:
   print("Unexpected error:", sys.exc_info())

copy() vs copyfile() :

copy() 還可以在復(fù)制內(nèi)容時(shí)設(shè)置權(quán)限位,而 copyfile() 只復(fù)制數(shù)據(jù)。

如果目標(biāo)是目錄,則 copy() 將復(fù)制文件,而 copyfile() 會失敗,出現(xiàn) Error 13。

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

在 Potion-3 可以很明顯看出 copyfile() 會比 copy() 快一點(diǎn),因?yàn)楹笳邥幸粋€(gè)附加任務(wù)(保留權(quán)限)。

3.Shutil Copyfileobj()方法

該方法將文件復(fù)制到目標(biāo)路徑或者文件對象。如果目標(biāo)是文件對象,那么你需要在調(diào)用 copyfileobj() 之后關(guān)閉它。它還假定了一個(gè)可選參數(shù)(緩沖區(qū)大?。?,你可以用來設(shè)置緩沖區(qū)長度。這是復(fù)制過程中保存在內(nèi)存中的字節(jié)數(shù)。系統(tǒng)使用的默認(rèn)大小是 16KB。

from shutil import copyfileobj
status = False
if isinstance(target, string_types):
   target = open(target, 'wb')
   status = True
try:
   copyfileobj(self.stream, target, buffer_size)
finally:
   if status:
       target.close()

4.Shutil Copy2()方法

雖然 copy2() 方法的功能類似于 copy()。但是它可以在復(fù)制數(shù)據(jù)時(shí)獲取元數(shù)據(jù)中添加的訪問和修改時(shí)間。復(fù)制相同的文件會導(dǎo)致 SameFileError 異常。

copy() vs copy2() :

copy() 只能設(shè)置權(quán)限位,而 copy2() 還可以使用時(shí)間戳來更新文件元數(shù)據(jù)。

copy() 在函數(shù)內(nèi)部調(diào)用 copyfile() 和 copymode(), 而 copy2() 是調(diào)用 copystat() 來替換copymode()。

5.Os Popen()方法

from shutil import *
import os 
import time
from os.path import basename

def displayFileStats(filename):
   file_stats = os.stat(basename(filename))
   print('\tMode    :', file_stats.st_mode)
   print('\tCreated :', time.ctime(file_stats.st_ctime))
   print('\tAccessed:', time.ctime(file_stats.st_atime))
   print('\tModified:', time.ctime(file_stats.st_mtime))

os.mkdir('test')

print('SOURCE:')
displayFileStats(__file__)

copy2(__file__, 'testfile')

print('TARGET:')
displayFileStats(os.path.realpath(os.getcwd() + '/test/testfile'))

該方法創(chuàng)建一個(gè)發(fā)送或者接受命令的管道。它返回一個(gè)打開的并且連接管道的文件對象。你可以根據(jù)文件打開模式將其用于讀取或者寫入比如‘r’(默認(rèn))或者‘w’。

os.popen(command[, mode[, bufsize]])

mode – 它可以是‘r’(默認(rèn))或者‘w’

Bufsize – 如果它的值是0,那么就不會出現(xiàn)緩沖。如果將它設(shè)置為1,那么在訪問文件時(shí)就會發(fā)生行緩沖。如果你提供一個(gè)大于1的值,那么就會在指定緩沖區(qū)大小的情況下發(fā)生緩沖。但是,對于負(fù)值,系統(tǒng)將采用默認(rèn)緩沖區(qū)大小。

對于Windows系統(tǒng):

import os
os.popen('copy 1.txt.py 2.txt.py')

對于Liunx系統(tǒng):

import os
os.popen('cp 1.txt.py 2.txt.py')

6.Os System()方法

這是運(yùn)行任何系統(tǒng)命令的最常用方式。使用 system() 方法,你可以調(diào)用 subshell 中的任何命令。在內(nèi)部,該方法將調(diào)用 C 語言的標(biāo)準(zhǔn)庫函數(shù)。

該方法返回該命令的退出狀態(tài)。

對于 Windows 系統(tǒng):

import os
os.system('copy 1.txt.py 2.txt.py') 

對于 Liunx 系統(tǒng):

import os
os.system('cp 1.txt.py 2.txt.py')

7.使用異步方式的線程庫復(fù)制文件

如果你想以異步方式復(fù)制文件,那么使用下面的方法。在這里,我們使用 Python 的線程模塊在后臺進(jìn)行復(fù)制操作。

在使用這種方法時(shí),請確保使用鎖定以避免鎖死。如果你的應(yīng)用程序使用多個(gè)線程讀取/寫入文件,就可能會遇到這種情況。

import shutil
from threading import Thread

src="1.txt.py"
dst="3.txt.py"

Thread(target=shutil.copy, args=[src, dst]).start()

8.使用Subprocess的Call()方法復(fù)制文件

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

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

它使用 call() 方法調(diào)用系統(tǒng)命令來執(zhí)行用戶任務(wù)。

import subprocess

src="1.txt.py"
dst="2.txt.py"
cmd='copy "%s" "%s"' % (src, dst)

status = subprocess.call(cmd, shell=True)

if status != 0:
    if status < 0:
        print("Killed by signal", status)
    else:
        print("Command failed with return code - ", status)
else:
    print('Execution of %s passed!\n' % cmd)

9.使用 subprocess 中的 Check_output() 方法復(fù)制文件

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

import os, subprocess

src=os.path.realpath(os.getcwd() + "http://cdn.techbeamers.com/1.txt.py")
dst=os.path.realpath(os.getcwd() + "http://cdn.techbeamers.com/2.txt.py")
cmd='copy "%s" "%s"' % (src, dst)

status = subprocess.check_output(['copy', src, dst], shell=True)

print("status: ", status.decode('utf-8'))

到此這篇關(guān)于Python復(fù)制文件的9個(gè)方法小結(jié)的文章就介紹到這了,更多相關(guān)Python復(fù)制文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • Python?sklearn庫中的隨機(jī)森林模型詳解

    Python?sklearn庫中的隨機(jī)森林模型詳解

    本文主要說明?Python?的?sklearn?庫中的隨機(jī)森林模型的常用接口、屬性以及參數(shù)調(diào)優(yōu)說明,需要讀者或多或少了解過sklearn庫和一些基本的機(jī)器學(xué)習(xí)知識
    2023-08-08
  • Python拉取視頻流的性能優(yōu)化指南

    Python拉取視頻流的性能優(yōu)化指南

    本文介紹了在Python中拉取網(wǎng)絡(luò)視頻流時(shí)遇到的性能問題,并提供了一套優(yōu)化方案,主要包括生產(chǎn)者消費(fèi)者模式、解耦生產(chǎn)與消費(fèi)、選擇正確的后端與解碼參數(shù)、跳幀處理、更高效的內(nèi)存結(jié)構(gòu)、多進(jìn)程繞過GIL等,此外,還提到了高級優(yōu)化技巧,需要的朋友可以參考下
    2026-04-04
  • 教你學(xué)會使用Python正則表達(dá)式

    教你學(xué)會使用Python正則表達(dá)式

    正則表達(dá)式是一個(gè)特殊的字符序列,它能幫助你方便的檢查一個(gè)字符串是否與某種模式匹配。 Python 自1.5版本起增加了re 模塊,它提供 Perl 風(fēng)格的正則表達(dá)式模式。re 模塊使 Python 語言擁有全部的正則表達(dá)式功能。
    2017-09-09
  • Selenium常見八大定位法總結(jié)

    Selenium常見八大定位法總結(jié)

    自動化最基礎(chǔ)的就屬于定位元素了,元素不會定位,基本上已經(jīng)團(tuán)滅了,就不用再去考慮什么自動化了,下面這篇文章主要給大家介紹了關(guān)于Selenium常見八大定位法的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • 關(guān)于fastapi異步接口卡死的坑及解決

    關(guān)于fastapi異步接口卡死的坑及解決

    這篇文章主要介紹了關(guān)于fastapi異步接口卡死的坑及解決,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python之父談Python的未來形式

    Python之父談Python的未來形式

    這篇文章主要介紹了Python之父談Python的未來,需要的朋友可以參考下
    2016-07-07
  • Python讀取txt某幾列繪圖的方法

    Python讀取txt某幾列繪圖的方法

    今天小編就為大家分享一篇Python讀取txt某幾列繪圖的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • centos 自動運(yùn)行python腳本和配置 Python 定時(shí)任務(wù)

    centos 自動運(yùn)行python腳本和配置 Python 定時(shí)任務(wù)

    這篇文章主要介紹了centos 自動運(yùn)行python腳本和配置 Python 定時(shí)任務(wù),文章內(nèi)容介紹詳細(xì),需要的小伙伴可以參考一下,希望對你有所幫助
    2022-03-03
  • python實(shí)現(xiàn)順序表的簡單代碼

    python實(shí)現(xiàn)順序表的簡單代碼

    這篇文章主要為大家詳細(xì)介紹了順序表定義及python實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python一鍵實(shí)現(xiàn)PDF文檔批量轉(zhuǎn)Word

    Python一鍵實(shí)現(xiàn)PDF文檔批量轉(zhuǎn)Word

    無論是在工作還是學(xué)習(xí)當(dāng)中,大家都會遇到這樣一個(gè)問題,將“PDF當(dāng)中的內(nèi)容(文本和圖片)轉(zhuǎn)換為Word的格式”,本文將用Python實(shí)現(xiàn)一鍵批量將PDF轉(zhuǎn)Word,需要的可以參考一下
    2022-08-08

最新評論

克什克腾旗| 原平市| 青铜峡市| 苍山县| 德令哈市| 贵州省| 县级市| 英山县| 吉木萨尔县| 云霄县| 布尔津县| 漯河市| 防城港市| 萨迦县| 西丰县| 大埔区| 尚志市| 景德镇市| 汝州市| 柘城县| 息烽县| 江达县| 达尔| 台江县| 汶川县| 江油市| 洛宁县| 青海省| 哈巴河县| 墨脱县| 巫溪县| 炎陵县| 梨树县| 东乌| 滁州市| 双江| 三亚市| 甘孜| 齐齐哈尔市| 荃湾区| 三河市|