欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何實現(xiàn)Python復(fù)制文件操作

馬哥Linux運維 ? 來源:博客園 ? 2024-07-18 14:53 ? 次閱讀

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

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

一些共享資源的程序會傾向于以阻塞模式來復(fù)制文件,而有些則可能希望以異步方式執(zhí)行。比如 — 使用線程來復(fù)制文件或者啟動單獨的進程來實現(xiàn)它。還有一點需要考慮的是平臺的可移植性。這意味著你應(yīng)該知道你要運行的程序所在的目標操作系統(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() 方法

Shutil Copyfile()方法

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

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

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

copyfile(source_file, destination_file)

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

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

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

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

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

如果目標是一個目錄,這意味著此方法不會復(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("
File copy done!
")

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("
Here follows the file content:
")
       print(file.read())
       file.close()
       print()
       break
   else:
       Continue

Shutil Copy()方法

copyfile(source_file, [destination_file or dest_dir])

copy() 方法的功能類似于 Unix 中的“cp”命令。這意味著如果目標是一個文件夾,那么它將在其中創(chuàng)建一個與源文件具有相同名稱(基本名稱)的新文件。此外,該方法會在復(fù)制源文件的內(nèi)容后同步目標文件權(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è)置權(quán)限位,而 copyfile() 只復(fù)制數(shù)據(jù)。

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

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

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

Shutil Copyfileobj()方法

該方法將文件復(fù)制到目標路徑或者文件對象。如果目標是文件對象,那么你需要在調(diào)用 copyfileobj() 之后關(guān)閉它。它還假定了一個可選參數(shù)(緩沖區(qū)大?。憧梢杂脕碓O(shè)置緩沖區(qū)長度。這是復(fù)制過程中保存在內(nèi)存中的字節(jié)數(shù)。系統(tǒng)使用的默認大小是 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()

Shutil Copy2()方法

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

copy() vs copy2() :

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

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

Os Popen()方法

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

def displayFileStats(filename):
   file_stats = os.stat(basename(filename))
   print('	Mode    :', file_stats.st_mode)
   print('	Created :', time.ctime(file_stats.st_ctime))
   print('	Accessed:', time.ctime(file_stats.st_atime))
   print('	Modified:', 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)建一個發(fā)送或者接受命令的管道。它返回一個打開的并且連接管道的文件對象。你可以根據(jù)文件打開模式將其用于讀取或者寫入比如‘r’(默認)或者‘w’。

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

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

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

對于Windows系統(tǒng):

import os
os.popen('copy http://www.delux-kingway.cn/images/chaijie_default.png 2.txt.py')

對于Liunx系統(tǒng):

import os
os.popen('cp http://www.delux-kingway.cn/images/chaijie_default.png 2.txt.py')

Os System()方法

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

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

對于 Windows 系統(tǒng):

import os
os.system('copy http://www.delux-kingway.cn/images/chaijie_default.png 2.txt.py') 

對于 Liunx 系統(tǒng):

import os
os.system('cp http://www.delux-kingway.cn/images/chaijie_default.png 2.txt.py')

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

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

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

import shutil
from threading import Thread

src="http://www.delux-kingway.cn/images/chaijie_default.png"
dst="3.txt.py"

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

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

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

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

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

import subprocess

src="http://www.delux-kingway.cn/images/chaijie_default.png"
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!
' % cmd)

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

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

import os, subprocess

src=os.path.realpath(os.getcwd() + "http://cdn.techbeamers.com/http://www.delux-kingway.cn/images/chaijie_default.png")
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'))

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11350

    瀏覽量

    210466
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    571

    瀏覽量

    24826
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4809

    瀏覽量

    85054

原文標題:用Python復(fù)制文件的9個方法

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    python學(xué)習(xí)--文件操作

    進入第7天的學(xué)習(xí),學(xué)到了python文件操作,教程說是和C語言兼容,于是就迫不及待的的想試試。按照教程的輸入,直接改成自己的目錄f=open('D:\python\text.txt'
    發(fā)表于 12-25 16:41

    請問python文件怎么操作?

    python文件操作步驟
    發(fā)表于 11-16 07:53

    C語言-文件操作

    在應(yīng)用程序中,經(jīng)常需要用文件來保存數(shù)據(jù),這就要用到文件的輸入/輸出操作。本章主要介紹和文件相關(guān)的類,以及目錄、文件
    發(fā)表于 04-23 11:11 ?13次下載

    linux中復(fù)制文件的方法

     linux中如何復(fù)制文件
    發(fā)表于 06-03 09:17 ?2264次閱讀
    linux中<b class='flag-5'>復(fù)制</b><b class='flag-5'>文件</b>的方法

    使用Python復(fù)制文件的方法有哪些

    以下是演示“如何在Python復(fù)制文件”的九種方法。shutil copyfile ()方法shutil copy ()方法shutil copyfileobj()方法shutil copy2
    發(fā)表于 08-13 17:43 ?6次下載
    使用<b class='flag-5'>Python</b><b class='flag-5'>復(fù)制</b><b class='flag-5'>文件</b>的方法有哪些

    使用python實現(xiàn)文件處理的資料詳細說明

    python 中對文件文件夾(文件操作函數(shù))的操作需要涉及到os 模塊和shutil 模塊。
    發(fā)表于 08-24 17:15 ?6次下載
    使用<b class='flag-5'>python</b><b class='flag-5'>實現(xiàn)</b><b class='flag-5'>文件</b>處理的資料詳細說明

    python文件操作實例代碼說明

    本文檔的主要內(nèi)容詳細介紹的是python文件操作實例代碼說明。
    發(fā)表于 09-07 18:21 ?11次下載
    <b class='flag-5'>python</b>的<b class='flag-5'>文件</b><b class='flag-5'>操作</b>實例代碼說明

    python文件和目錄的操作方法介紹和實例說明

    這篇文章主要介紹了python 文件和目錄的操作方法,簡明總結(jié)了文件和目錄操作中常用的模塊、方法,并列舉了一個綜合實例,需要的朋友可以參考下
    發(fā)表于 09-16 17:12 ?7次下載
    <b class='flag-5'>python</b><b class='flag-5'>文件</b>和目錄的<b class='flag-5'>操作</b>方法介紹和實例說明

    python文件和目錄的操作方法介紹和實例說明

    這篇文章主要介紹了python 文件和目錄的操作方法,簡明總結(jié)了文件和目錄操作中常用的模塊、方法,并列舉了一個綜合實例,需要的朋友可以參考下
    發(fā)表于 09-16 17:12 ?0次下載
    <b class='flag-5'>python</b><b class='flag-5'>文件</b>和目錄的<b class='flag-5'>操作</b>方法介紹和實例說明

    abaqus-Python實例-操作excel文件下載

    abaqus-Python實例-操作excel文件
    發(fā)表于 12-17 16:40 ?0次下載
    abaqus-<b class='flag-5'>Python</b>實例-<b class='flag-5'>操作</b>excel<b class='flag-5'>文件</b>下載

    python文件操作是什么

    一、什么是文件操作 一個完整的程序一般都包括數(shù)據(jù)的存儲和讀?。晃覀冊谇懊鎸懙某绦驍?shù)據(jù)都沒有進行實際的存儲,因此python解釋器執(zhí)行完數(shù)據(jù)就消失了 實際開發(fā)中,我們經(jīng)常需要從外部存儲介質(zhì)(硬盤、光盤
    的頭像 發(fā)表于 06-21 17:15 ?2340次閱讀
    <b class='flag-5'>python</b><b class='flag-5'>文件</b><b class='flag-5'>操作</b>是什么

    如何使用Python讀取寫入Word文件

    01 準備 Python 是一種通用編程語言,也可以用于處理 Microsoft Word 文件。在本文中,我將向你介紹如何使用 Pythonpython-docx 庫讀取、寫入
    的頭像 發(fā)表于 09-27 17:03 ?2158次閱讀

    Python教你用 Rows 快速操作csv文件

    Rows 是一個專門用于操作表格的第三方Python模塊。 只要通過 Rows 讀取 csv 文件,她就能生成可以被計算的 Python 對象。 相比于 pandas 的 pd.rea
    的頭像 發(fā)表于 10-21 10:18 ?665次閱讀

    如何用Python實現(xiàn)文件系統(tǒng)的操作功能

    近幾年隨著 Python 的熱度不斷上漲,人們漸漸使用這門編程語言來進行一些自動化操作,以節(jié)省重復(fù)勞動帶來的效率低下,那么必定會涉及到對 文件系統(tǒng)的操作 ,包括
    的頭像 發(fā)表于 10-30 14:27 ?457次閱讀
    如何用<b class='flag-5'>Python</b>來<b class='flag-5'>實現(xiàn)</b><b class='flag-5'>文件</b>系統(tǒng)的<b class='flag-5'>操作</b>功能

    hyper v 復(fù)制,hyper v 復(fù)制如何操作

    工作效率。今天就為大家介紹hyperv復(fù)制如何操作。 ? ?Hyper-V提供了多種方法來實現(xiàn)文件復(fù)制和共享,以下是幾種常見的
    的頭像 發(fā)表于 01-22 16:01 ?186次閱讀
    hyper v <b class='flag-5'>復(fù)制</b>,hyper v <b class='flag-5'>復(fù)制</b>如何<b class='flag-5'>操作</b>