在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

如何實現Python復制文件操作

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

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

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

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

用 Python 復制文件的 9 種方法具體是:

shutil copyfile() 方法

shutil copy() 方法

shutil copyfileobj() 方法

shutil copy2() 方法

os popen 方法

os system() 方法

threading Thread() 方法

subprocess call() 方法

subprocess check_output() 方法

Shutil Copyfile()方法

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

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

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

copyfile(source_file, destination_file)

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

它將源內容復制到目標文件中。

如果目標文件不可寫入,那么復制操作將導致 IOError 異常。

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

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

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

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

# 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”命令。這意味著如果目標是一個文件夾,那么它將在其中創建一個與源文件具有相同名稱(基本名稱)的新文件。此外,該方法會在復制源文件的內容后同步目標文件權限到源文件。

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() 還可以在復制內容時設置權限位,而 copyfile() 只復制數據。

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

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

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

Shutil Copyfileobj()方法

該方法將文件復制到目標路徑或者文件對象。如果目標是文件對象,那么你需要在調用 copyfileobj() 之后關閉它。它還假定了一個可選參數(緩沖區大小),你可以用來設置緩沖區長度。這是復制過程中保存在內存中的字節數。系統使用的默認大小是 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()。但是它可以在復制數據時獲取元數據中添加的訪問和修改時間。復制相同的文件會導致 SameFileError 異常。

copy() vs copy2() :

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

copy() 在函數內部調用 copyfile() 和 copymode(), 而 copy2() 是調用 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'))

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

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

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

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

對于Windows系統:

import os
os.popen('copy http://m.xsypw.cn/images/chaijie_default.png 2.txt.py')

對于Liunx系統:

import os
os.popen('cp http://m.xsypw.cn/images/chaijie_default.png 2.txt.py')

Os System()方法

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

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

對于 Windows 系統:

import os
os.system('copy http://m.xsypw.cn/images/chaijie_default.png 2.txt.py') 

對于 Liunx 系統:

import os
os.system('cp http://m.xsypw.cn/images/chaijie_default.png 2.txt.py')

使用異步方式的線程庫復制文件

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

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

import shutil
from threading import Thread

src="http://m.xsypw.cn/images/chaijie_default.png"
dst="3.txt.py"

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

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

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

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

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

import subprocess

src="http://m.xsypw.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() 方法復制文件

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

import os, subprocess

src=os.path.realpath(os.getcwd() + "http://cdn.techbeamers.com/http://m.xsypw.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'))

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210394
  • 文件
    +關注

    關注

    1

    文章

    570

    瀏覽量

    24822
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85038

原文標題:用Python復制文件的9個方法

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

收藏 人收藏

    評論

    相關推薦

    python學習--文件操作

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

    labview 如何實現復制文件的同時獲取復制進度

    如何實現復制文件的同時獲取復制進度哪位大俠實現了,麻煩指點下,謝謝!
    發表于 12-27 15:12

    請問python文件怎么操作

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

    C語言-文件操作

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

    linux中復制文件的方法

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

    使用Python復制文件的方法有哪些

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

    使用python實現文件處理的資料詳細說明

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

    python文件操作實例代碼說明

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

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

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

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

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

    python文件操作是什么

    一、什么是文件操作 一個完整的程序一般都包括數據的存儲和讀取;我們在前面寫的程序數據都沒有進行實際的存儲,因此python解釋器執行完數據就消失了 實際開發中,我們經常需要從外部存儲介質(硬盤、光盤
    的頭像 發表于 06-21 17:15 ?2322次閱讀
    <b class='flag-5'>python</b><b class='flag-5'>文件</b><b class='flag-5'>操作</b>是什么

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

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

    如何用Python實現文件系統的操作功能

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

    hyper v 復制,hyper v 復制如何操作

    工作效率。今天就為大家介紹hyperv復制如何操作。 ? ?Hyper-V提供了多種方法來實現文件復制和共享,以下是幾種常見的
    的頭像 發表于 01-22 16:01 ?155次閱讀
    hyper v <b class='flag-5'>復制</b>,hyper v <b class='flag-5'>復制</b>如何<b class='flag-5'>操作</b>
    主站蜘蛛池模板: 黑人黄色片| 午夜精品久久久久久影视riav | 天天射综合网站 | 99久久国产免费中文无字幕 | 97色伦人人| 亚洲视频1区 | 亚洲444444在线观看 | 国产大乳喷奶水在线看 | 国产午夜免费 | 黄到让你下面湿的视频 | 99精品热| 电影天堂在线观看三级 | 欧美一区二区三区精品 | 久久久久久青草大香综合精品 | 久草色播| 在线视频免费视频网站 | 99久久精品费精品国产一区二区 | 性欧美精品 | 精品一区二区三区视频 | 成人精品视频一区二区三区 | 又色又污又爽又黄的网站 | 天天都色 | 欧美日韩亚洲一区 | 欧美网站黄 | 黄黄网| 涩涩高清无乱码在线观看 | 一区二区视频 | 新天堂 | 亚洲小视频在线播放 | 亚洲成人三级电影 | 亚洲一级毛片免费在线观看 | 68日本xxxxxxxxx18能看的 | 男人搡女人视频免费看 | 欧美aaaaa | 成人亚洲网站www在线观看 | xxxxxxxx日本69 | 日韩欧美亚洲综合久久影院d3 | 在线天堂中文新版有限公司 | 性中国videosex国产孕妇 | 日本特黄色大片 | 久久午夜宅男免费网站 |