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

Python實(shí)現(xiàn)文件/文件夾復(fù)制功能

 更新時(shí)間:2025年04月01日 08:59:35   作者:ak啊  
在數(shù)據(jù)處理和文件管理的日常工作中,我們經(jīng)常需要復(fù)制文件夾及其子文件夾下的特定文件,手動(dòng)操作不僅效率低下,而且容易出錯(cuò),因此,使用編程語(yǔ)言自動(dòng)化這一任務(wù)顯得尤為重要,所以本文給大家介紹了使用Python實(shí)現(xiàn)文件/文件夾復(fù)制功能,需要的朋友可以參考下

一、基礎(chǔ)工具庫(kù)介紹

Python標(biāo)準(zhǔn)庫(kù)中的shutil模塊是主要工具:

import shutil
import os

二、文件復(fù)制基礎(chǔ)

1. 復(fù)制單個(gè)文件

# 保留元數(shù)據(jù)(修改時(shí)間等)
shutil.copy2('source.txt', 'destination.txt')

# 僅復(fù)制內(nèi)容
shutil.copy('source.txt', 'backup/')  # 自動(dòng)保留文件名

# 文件流方式(適合大文件)
with open('source.txt', 'rb') as src, open('dest.txt', 'wb') as dst:
    shutil.copyfileobj(src, dst, length=16*1024)  # 16KB緩沖區(qū)

三、目錄復(fù)制進(jìn)階

1. 簡(jiǎn)單目錄復(fù)制

# 復(fù)制整個(gè)目錄(目標(biāo)目錄必須不存在)
shutil.copytree('src_dir', 'dst_dir')

# 允許覆蓋已存在目錄(Python 3.8+)
shutil.copytree('src', 'existing_dir', dirs_exist_ok=True)

2. 自定義復(fù)制過(guò)程

def ignore_patterns(*patterns):
    def _ignore(path, names):
        ignored = []
        for pattern in patterns:
            ignored.extend(fnmatch.filter(names, pattern))
        return set(ignored)
    return _ignore

# 排除.pyc文件和臨時(shí)文件
shutil.copytree('src', 'dst', ignore=ignore_patterns('*.pyc', '*.tmp'))

# 帶進(jìn)度回調(diào)的復(fù)制
def copy_progress(src, dst, *, follow_symlinks=True):
    print(f"Copying {src} => {dst}")

shutil.copytree('src', 'dst', copy_function=copy_progress)

四、高級(jí)自定義實(shí)現(xiàn)

當(dāng)需要完全控制復(fù)制流程時(shí),可以手動(dòng)實(shí)現(xiàn):

def deep_copy(src, dst, symlinks=False):
    if not os.path.exists(dst):
        os.makedirs(dst)
        shutil.copystat(src, dst)
    
    for item in os.listdir(src):
        src_path = os.path.join(src, item)
        dst_path = os.path.join(dst, item)
        
        if os.path.isdir(src_path):
            deep_copy(src_path, dst_path, symlinks)
        else:
            if os.path.exists(dst_path):
                if os.path.samefile(src_path, dst_path):
                    continue
                os.remove(dst_path)
            if symlinks and os.path.islink(src_path):
                linkto = os.readlink(src_path)
                os.symlink(linkto, dst_path)
            else:
                shutil.copy2(src_path, dst_path)

五、異常處理要點(diǎn)

try:
    shutil.copytree('src', 'dst')
except shutil.Error as e:
    print(f'Directory not copied. Error: {e}')
except OSError as e:
    print(f'OSError: {e.strerror}')

六、性能優(yōu)化建議

  • 批量小文件:使用shutil.copytree的默認(rèn)實(shí)現(xiàn)
  • 超大文件:使用copyfileobj分塊復(fù)制
  • 網(wǎng)絡(luò)存儲(chǔ):增加緩沖區(qū)大?。ɡ?code>16*1024*1024即16MB)
  • 并行處理:對(duì)獨(dú)立子目錄使用多線程/多進(jìn)程

七、完整示例代碼

import shutil
import os
from pathlib import Path

def smart_copy(src, dst, overwrite=False, ignore=None):
    """智能復(fù)制器"""
    src = Path(src)
    dst = Path(dst)

    if src.is_file():
        if dst.is_dir():
            dst = dst / src.name
        if dst.exists():
            if overwrite:
                dst.unlink()
            else:
                raise FileExistsError(f"{dst} already exists")
        shutil.copy2(str(src), str(dst))
        return

    if not src.is_dir():
        raise ValueError("Source path invalid")

    if dst.exists():
        if overwrite:
            if dst.is_dir():
                shutil.rmtree(dst)
            else:
                dst.unlink()
        else:
            raise FileExistsError(f"{dst} already exists")

    shutil.copytree(
        str(src),
        str(dst),
        symlinks=True,
        ignore=ignore,
        copy_function=shutil.copy2,
        dirs_exist_ok=overwrite
    )

# 使用示例
smart_copy(
    '/data/project',
    '/backup/project_2024',
    overwrite=True,
    ignore=shutil.ignore_patterns('*.log', 'temp')
)

關(guān)鍵點(diǎn)說(shuō)明:

  • 使用copy2而不是copy可以保留文件元數(shù)據(jù)
  • Path對(duì)象比字符串路徑更安全易用
  • dirs_exist_ok參數(shù)需要Python 3.8+
  • 自定義ignore模式支持復(fù)雜過(guò)濾邏輯
  • 完善的異常處理保證操作可靠性

這種方法可以處理以下復(fù)雜場(chǎng)景:

  • 混合文件類型(普通文件/符號(hào)鏈接/特殊文件)
  • 保留所有文件屬性
  • 覆蓋已有內(nèi)容的安全處理
  • 靈活的過(guò)濾機(jī)制
  • 跨平臺(tái)兼容性(Windows/Unix)

以上就是Python實(shí)現(xiàn)文件/文件夾復(fù)制功能的詳細(xì)內(nèi)容,更多關(guān)于Python文件/文件夾復(fù)制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 老生常談Python進(jìn)階之裝飾器

    老生常談Python進(jìn)階之裝飾器

    下面小編就為大家?guī)?lái)一篇老生常談Python進(jìn)階之裝飾器。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Python實(shí)現(xiàn)類的創(chuàng)建與使用方法示例

    Python實(shí)現(xiàn)類的創(chuàng)建與使用方法示例

    這篇文章主要介紹了Python實(shí)現(xiàn)類的創(chuàng)建與使用方法,結(jié)合簡(jiǎn)單計(jì)算器功能實(shí)例分析了Python類的定義與使用方法,需要的朋友可以參考下
    2017-07-07
  • Python中常見(jiàn)路徑算法的原理與實(shí)現(xiàn)詳解

    Python中常見(jiàn)路徑算法的原理與實(shí)現(xiàn)詳解

    在計(jì)算機(jī)科學(xué)中,路徑算法是解決許多實(shí)際問(wèn)題的核心工具,本文介紹了Python中三種常見(jiàn)的路徑算法及其實(shí)現(xiàn),幫助讀者快速上手并理解這些算法的原理和應(yīng)用
    2026-04-04
  • NetworkX之Prim算法(實(shí)例講解)

    NetworkX之Prim算法(實(shí)例講解)

    下面小編就為大家分享一篇NetworkX之Prim算法實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • python快速編寫單行注釋多行注釋的方法

    python快速編寫單行注釋多行注釋的方法

    在本篇文章里小編給大家整理的是關(guān)于python快速編寫單行注釋多行注釋的方法,有此需要的朋友們可以參考學(xué)習(xí)下。
    2019-07-07
  • Python從Manim中提取表格/坐標(biāo)系并轉(zhuǎn)GIF的四種高效方案

    Python從Manim中提取表格/坐標(biāo)系并轉(zhuǎn)GIF的四種高效方案

    在數(shù)據(jù)可視化和數(shù)學(xué)動(dòng)畫創(chuàng)作中,我們經(jīng)常需要將 Manim 動(dòng)畫中的表格、坐標(biāo)系等核心元素單獨(dú)導(dǎo)出為 GIF,本文整理了四種高效方案,每種方案僅提供核心代碼,聚焦關(guān)鍵實(shí)現(xiàn)邏輯,需要的朋友可以參考下
    2025-08-08
  • Python中@符號(hào)的具體使用

    Python中@符號(hào)的具體使用

    本文主要介紹了Python中@符號(hào)的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • python按順序重命名文件并分類轉(zhuǎn)移到各個(gè)文件夾中的實(shí)現(xiàn)代碼

    python按順序重命名文件并分類轉(zhuǎn)移到各個(gè)文件夾中的實(shí)現(xiàn)代碼

    這篇文章主要介紹了python按順序重命名文件并分類轉(zhuǎn)移到各個(gè)文件夾中,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • python使用ctypes調(diào)用擴(kuò)展模塊的實(shí)例方法

    python使用ctypes調(diào)用擴(kuò)展模塊的實(shí)例方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python使用ctypes調(diào)用擴(kuò)展模塊的實(shí)例方法內(nèi)容,需要的朋友們可以學(xué)習(xí)參考下。
    2020-01-01
  • python安裝pywifi全過(guò)程

    python安裝pywifi全過(guò)程

    這篇文章主要介紹了python安裝pywifi全過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評(píng)論

临湘市| 海口市| 仁怀市| 乐平市| 穆棱市| 巫山县| 桃园县| 凌云县| 泸水县| 巴彦淖尔市| 宣城市| 缙云县| 安阳县| 万州区| 扎兰屯市| 类乌齐县| 大英县| 鄯善县| 高邮市| 剑阁县| 涟源市| 小金县| 武义县| 北票市| 白城市| 晋州市| 南木林县| 开江县| 八宿县| 凤城市| 承德县| 温宿县| 华池县| 乐亭县| 边坝县| 全椒县| 白沙| 车致| 富平县| 焦作市| 松原市|