亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用Python實現(xiàn)快速復(fù)制或剪切文件列表中的所有文件

 更新時間:2025年04月07日 09:35:31   作者:程序員總部  
在程序開發(fā)的過程中,處理文件是我們?nèi)粘9ぷ髦幸粋€很重要的環(huán)節(jié),所以這篇文章小編就來和大家一起聊聊如何用Python來快速復(fù)制或剪切一個文件列表中的所有文件吧

在程序開發(fā)的過程中,處理文件是我們?nèi)粘9ぷ髦幸粋€很重要的環(huán)節(jié)。想象一下,當(dāng)你需要把一大堆文件從一個文件夾移動到另一個文件夾時,手工操作真的會讓人覺得煩躁對吧?這時,用代碼來處理這些煩惱,真是太方便了!今天我們就來一起聊聊如何用Python來快速復(fù)制或剪切一個文件列表中的所有文件,趕緊放松一下,開始動手吧!

我們需要用到的模塊是shutil,這個小家伙可是Python中非常強大的工具哦,可以幫助我們處理文件,比如復(fù)制、剪切,還有刪除文件啥的,功能很全的!接下來,我會用簡單的示例代碼給大家展示一下。

說到復(fù)制文件,shutil.copy和shutil.copy2這兩個函數(shù)總是讓人糾結(jié)!shutil.copy會把文件的內(nèi)容和權(quán)限都復(fù)制過去,而shutil.copy2除了這些,還會幫你一起保存文件的創(chuàng)建時間和修改時間,可以說是個體貼的小助手了!為了保證安全起見,我們這里用shutil.copy2更好哦!

復(fù)制文件的示例代碼

好啦,下面我們來看看具體的實現(xiàn)吧。假設(shè)我們有一個待復(fù)制文件路徑的列表,手指準(zhǔn)備好,我們就能開始了!

import shutil
import os

def copy_files(file_list, destination_folder):
    if not os.path.exists(destination_folder):
        os.makedirs(destination_folder)  # 創(chuàng)建目標(biāo)文件夾啦
    for file_path in file_list:
        if os.path.isfile(file_path):
            shutil.copy2(file_path, destination_folder)  # 復(fù)制文件!
            print(f"已復(fù)制 {file_path} 到 {destination_folder}")
        else:
            print(f"{file_path} 不是有效的文件路徑呢。")

# 示例使用
files_to_copy = ['/path/to/file1.txt', '/path/to/file2.jpg', '/path/to/file3.pdf']
dest_folder = '/path/to/destination/'
copy_files(files_to_copy, dest_folder)

這段代碼看起來簡單吧?我們導(dǎo)入了shutil和os這兩個好伙伴,然后先檢查一下目標(biāo)文件夾,如果沒有就創(chuàng)建它!緊接著,遍歷每個文件路徑,如果路徑是有效的,就開始復(fù)制啦,不然就提醒你“嘿,這個文件路徑不對哦”。

剪切文件的實現(xiàn)

那么,剪切文件該怎么做呢?其實與復(fù)制的思路差不多,只是在完成復(fù)制之后需要把原文件刪除。來,看看下面的示例代碼吧!

def move_files(file_list, destination_folder):
    if not os.path.exists(destination_folder):
        os.makedirs(destination_folder)  # 創(chuàng)建目標(biāo)文件夾啦
    for file_path in file_list:
        if os.path.isfile(file_path):
            shutil.move(file_path, destination_folder)  # 移動文件哦
            print(f"已移動 {file_path} 到 {destination_folder}")
        else:
            print(f"{file_path} 不是有效的文件路徑呢。")

# 示例使用
files_to_move = ['/path/to/file4.txt', '/path/to/file5.jpg']
move_files(files_to_move, dest_folder)

在這段代碼中,我們使用shutil.move來移動文件,它會自動幫你處理刪除原文件的事,讓你省心省力!可以看到這段代碼和復(fù)制的幾乎一模一樣,只有調(diào)用的函數(shù)不一樣而已。是不是很簡單呢?

這些代碼的應(yīng)用場景

在實際項目中,用Python處理文件復(fù)制和剪切是非常常見的場景,比如說數(shù)據(jù)備份、文件整理等。有時候你可能在開發(fā)一個小工具,用來整理桌面上的文件,這些代碼都能派上用場哦!當(dāng)然,你還可以進一步增加功能,比如進度條、錯誤重試之類的,讓用戶體驗更好,更流暢。

哦,對了,親愛的程序員們,別忘了關(guān)注一個叫【程序員總部】的公眾號哦!這個賬號是字節(jié)的一位大佬創(chuàng)辦的,里面匯聚了阿里、字節(jié)、百度等大廠的優(yōu)秀程序員,分享了超多實用的編程技巧和技術(shù)動態(tài)!想要提升自己的能力,獲取更多靈感的話,快去關(guān)注一下吧!

動手吧!

今天我們討論了如何用Python輕松復(fù)制和剪切文件。這項技能在幫我們節(jié)省時間的同時,也讓我們在編程的路上變得更加順暢。無論你是剛?cè)腴T的菜鳥還是已經(jīng)有點經(jīng)驗的老手,這些文件操作的小技巧都能讓你的代碼更簡潔、更高效。

程序員的世界里,實踐出真知!只要愿意嘗試,大家一定能掌握這些基礎(chǔ)的文件操作,成為更優(yōu)秀的開發(fā)者哦!讓我們一起加油,不斷前行吧!

方法補充

Python復(fù)制文件的9個方法

1.Shutil Copyfile()方法

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

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

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

copyfile(source_file, destination_file)

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

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

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

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

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

如果目標(biāo)是一個目錄,這意味著此方法不會復(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)是一個文件夾,那么它將在其中創(chuàng)建一個與源文件具有相同名稱(基本名稱)的新文件。此外,該方法會在復(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è)置權(quán)限位,而 copyfile() 只復(fù)制數(shù)據(jù)。

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

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

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

3.Shutil Copyfileobj()方法

該方法將文件復(fù)制到目標(biāo)路徑或者文件對象。如果目標(biāo)是文件對象,那么你需要在調(diào)用 copyfileobj() 之后關(guān)閉它。它還假定了一個可選參數(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ù)據(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()。

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)建一個發(fā)送或者接受命令的管道。它返回一個打開的并且連接管道的文件對象。你可以根據(jù)文件打開模式將其用于讀取或者寫入比如‘r’(默認(rèn))或者‘w’。

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

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

Bufsize – 如果它的值是0,那么就不會出現(xiàn)緩沖。如果將它設(shè)置為1,那么在訪問文件時就會發(fā)生行緩沖。如果你提供一個大于1的值,那么就會在指定緩沖區(qū)大小的情況下發(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()方法

這是運行任何系統(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 的線程模塊在后臺進行復(fù)制操作。

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

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

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() 方法,你可以運行外部命令或程序并捕獲其輸出。它也支持管道。

#學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流群:531509025

#學(xué)習(xí)中遇到問題沒人解答?小編創(chuàng)建了一個Python學(xué)習(xí)交流群:531509025

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實現(xiàn)快速復(fù)制或剪切文件列表中的所有文件的文章就介紹到這了,更多相關(guān)Python復(fù)制或剪切文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何在Python中安裝GDAL庫

    如何在Python中安裝GDAL庫

    這篇文章主要介紹了如何在Python中安裝GDAL庫,GDAL是一個在X/MIT許可協(xié)議下的開源柵格空間數(shù)據(jù)轉(zhuǎn)換庫,需要的朋友可以參考下
    2023-04-04
  • pytorch標(biāo)簽轉(zhuǎn)onehot形式實例

    pytorch標(biāo)簽轉(zhuǎn)onehot形式實例

    今天小編就為大家分享一篇pytorch標(biāo)簽轉(zhuǎn)onehot形式實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python通過4種方式實現(xiàn)進程數(shù)據(jù)通信

    Python通過4種方式實現(xiàn)進程數(shù)據(jù)通信

    這篇文章主要介紹了Python通過4種方式實現(xiàn)進程數(shù)據(jù)通信,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Python圖像識別+KNN求解數(shù)獨的實現(xiàn)

    Python圖像識別+KNN求解數(shù)獨的實現(xiàn)

    這篇文章主要介紹了Python圖像識別+KNN求解數(shù)獨的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 詳解有關(guān)PyCharm安裝庫失敗的問題的解決方法

    詳解有關(guān)PyCharm安裝庫失敗的問題的解決方法

    這篇文章主要介紹了詳解有關(guān)PyCharm安裝庫失敗的問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 使用OpenCV實現(xiàn)仿射變換—縮放功能

    使用OpenCV實現(xiàn)仿射變換—縮放功能

    這篇文章主要介紹了使用OpenCV實現(xiàn)仿射變換—縮放功能,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • python基礎(chǔ)pandas的drop()用法示例詳解

    python基礎(chǔ)pandas的drop()用法示例詳解

    這篇文章主要介紹了python基礎(chǔ)pandas的drop()用法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • linux中使用Python對圖片進行批量命名

    linux中使用Python對圖片進行批量命名

    大家好,本篇文章主要講的是linux中使用Python對圖片進行批量命名,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • windows python嵌入式安裝全過程

    windows python嵌入式安裝全過程

    文章介紹了嵌入式安裝包的概念,包括嵌入式Python和如何創(chuàng)建嵌入式安裝包,嵌入式Python是一個精簡版的Python解釋器,可以在沒有安裝Python的環(huán)境中運行,文章還提供了下載和配置嵌入式Python的詳細步驟,包括從官網(wǎng)下載安裝包、下載get-pip.py、配置文件和環(huán)境變量等
    2024-11-11
  • Python如何獲取對象大小和文件大小

    Python如何獲取對象大小和文件大小

    這篇文章主要介紹了Python如何獲取對象大小和文件大小問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01

最新評論