精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Shutil 標準庫: Python 文件操作的萬用刀

開發 后端
今天來聊一個被低估的 Python 標準庫 - shutil 。工作中我們用 Python (尤其是寫一些短小輕快的腳本)雖然經常和文件打交道,卻很少用到 shutil 。但實際上, shutil 提供了比 os 模塊更高級的文件操作接口,能讓我們寫出更 Pythonic 的代碼。

今天來聊一個被低估的 Python 標準庫 - shutil 。工作中我們用 Python (尤其是寫一些短小輕快的腳本)雖然經常和文件打交道,卻很少用到 shutil 。但實際上, shutil 提供了比 os 模塊更高級的文件操作接口,能讓我們寫出更 Pythonic 的代碼。

從一個真實場景說起

最近在整理項目代碼時,需要將散落在各處的配置文件歸類到統一目錄。按以往的習慣,我會這樣寫:

import os

# 創建目標目錄
if not os.path.exists("configs"):
    os.makedirs("configs")

# 移動文件
for root, dirs, files in os.walk("."):
    for file in files:
        if file.endswith(".conf"):
            src = os.path.join(root, file)
            dst = os.path.join("configs", file)
            os.rename(src, dst)

這段代碼能完成任務,但存在幾個問題:

  • 如果目標路徑已存在同名文件會報錯
  • 不支持跨設備移動
  • 沒有保留文件的元數據(權限、時間戳等)

用 shutil 可以優雅地解決這些問題:

import shutil
import os

os.makedirs("configs", exist_ok=True)
for root, dirs, files in os.walk("."):
    for file in files:
        if file.endswith(".conf"):
            src = os.path.join(root, file)
            dst = os.path.join("configs", file)
            shutil.move(src, dst)

看起來差別不大,但 shutil.move() 會:

當目標路徑已存在同名文件時, shutil.move() 的行為取決于操作系統

  • Windows:如果目標文件存在且正在使用,會拋出 PermissionError ;否則會靜默覆蓋目標文件
  • Unix/Linux:會遵循操作系統的規則。如果用戶有權限,會覆蓋目標文件;否則拋出 PermissionError

支持跨設備移動

"跨設備"指的是在不同的文件系統或存儲設備之間移動文件,比如從 C 盤移動到 D 盤、從本地磁盤移動到網絡驅動器、從固態硬盤移動到 U 盤。

shutil.move() 會首先嘗試使用 os.rename() ,如果失敗且錯誤是跨設備錯誤 errno.EXDEV ,則復制文件到目標位置,驗證復制成功,最后刪除源文件。

保留源文件的所有元數據。

shutil 常用操作詳解

1. 復制文件和目錄

# 復制文件
shutil.copy("source.txt", "dest.txt")      # 復制文件內容
shutil.copy2("source.txt", "dest.txt")     # 復制文件內容和元數據

# 復制目錄
shutil.copytree("src_dir", "dst_dir")      # 遞歸復制整個目錄樹

copy2() 比 copy() 多了preserving metadata 的功能,在需要保留文件屬性時很有用。

2. 刪除目錄

# 刪除目錄樹
shutil.rmtree("dir_to_remove")             # 遞歸刪除目錄及其內容

比 os.rmdir() 強大,后者只能刪除空目錄。

3. 磁盤使用統計

total, used, free = shutil.disk_usage(".")
print(f"總空間: {total // (2**30)} GiB")
print(f"已使用: {used // (2**30)} GiB")
print(f"可用: {free // (2**30)} GiB")

直觀地獲取磁盤使用情況,免去了手動計算的麻煩。

4. 文件打包與壓縮

# 創建壓縮包
shutil.make_archive("backup", "zip", "source_dir")   # 支持zip、tar等格式

# 解壓縮
shutil.unpack_archive("backup.zip", "extract_dir")

實用腳本示例

1. 項目備份工具

import shutil
from datetime import datetime
import os

def backup_project(project_path, backup_dir="backups"):
    # 創建以時間戳命名的備份文件
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    backup_name = f"backup_{timestamp}"
    
    # 確保備份目錄存在
    os.makedirs(backup_dir, exist_ok=True)
    
    # 創建壓縮包
    archive_path = shutil.make_archive(
        os.path.join(backup_dir, backup_name),
        "zip",
        project_path
    )
    
    print(f"備份完成: {archive_path}")

2. 大文件搬運工具

import shutil
import os
from pathlib import Path

def move_large_files(src_dir, dst_dir, min_size_mb=100):
    """移動大于指定大小的文件到目標目錄"""
    dst_path = Path(dst_dir)
    dst_path.mkdir(exist_ok=True)
    
    for root, _, files in os.walk(src_dir):
        for file in files:
            file_path = Path(root) / file
            if file_path.stat().st_size > min_size_mb * 1024 * 1024:
                try:
                    shutil.move(str(file_path), dst_path / file)
                    print(f"已移動: {file}")
                except Exception as e:
                    print(f"移動失敗 {file}: {e}")

3. 智能文件分類器

import shutil
from pathlib import Path
import mimetypes

def organize_files(directory):
    """根據文件類型自動分類文件"""
    directory = Path(directory)
    
    # 遍歷所有文件
    for file_path in directory.rglob("*"):
        if file_path.is_file():
            # 獲取文件類型
            mime_type, _ = mimetypes.guess_type(str(file_path))
            if mime_type:
                category = mime_type.split("/")[0]
                
                # 創建分類目錄
                dest_dir = directory / category
                dest_dir.mkdir(exist_ok=True)
                
                # 移動文件
                try:
                    shutil.move(str(file_path), str(dest_dir / file_path.name))
                except Exception as e:
                    print(f"處理{file_path}時出錯: {e}")

性能提示

對于大文件操作,shutil 提供了 copyfileobj() 方法,支持設置緩沖區大小:

with open("source.dat", "rb") as fsrc:
    with open("dest.dat", "wb") as fdst:
        shutil.copyfileobj(fsrc, fdst, length=1024*1024)  # 1MB buffer

copytree() 支持多進程并行復制:

from multiprocessing import Pool

def copy_with_progress(src, dst):
    shutil.copy2(src, dst)
    return dst

with Pool(processes=4) as pool:
    shutil.copytree("src_dir", "dst_dir", copy_function=pool.map)

文件屬性操作

1. 權限和所有權

import shutil
import os

def mirror_permissions(src, dst):
    # 復制權限位
    shutil.copymode(src, dst)
    
    # 復制所有權(需要root權限)
    try:
        shutil.chown(dst, 
                     user=os.stat(src).st_uid,
                     group=os.stat(src).st_gid)
    except PermissionError:
        print("需要管理員權限來修改所有權")

2. 元數據復制

import shutil
import os
from datetime import datetime

def show_metadata(path):
    stat = os.stat(path)
    print(f"訪問時間: {datetime.fromtimestamp(stat.st_atime)}")
    print(f"修改時間: {datetime.fromtimestamp(stat.st_mtime)}")
    print(f"創建時間: {datetime.fromtimestamp(stat.st_ctime)}")
    print(f"權限: {oct(stat.st_mode)[-3:]}")
    print(f"大小: {stat.st_size} bytes")

# 復制文件并保留所有元數據
src = "source.txt"
dst = "dest.txt"
shutil.copy2(src, dst)

print("源文件元數據:")
show_metadata(src)
print("\n目標文件元數據:")
show_metadata(dst)

總結

shutil 是一個設計優雅的文件操作庫:

  • 提供了比 os 模塊更高級的接口
  • 自動處理各種邊界情況
  • 保持了 Python "batteries included" 的理念

下次遇到文件操作需求,不妨先看看 shutil 是否已經提供了合適的工具。畢竟,"不要重復發明輪子"也是 Python 的哲學之一。

責任編輯:姜華 來源: Piper蛋窩
相關推薦

2021-04-15 07:53:15

ParkMobile數據泄露網絡犯罪

2019-05-17 10:10:30

優衣庫黑客數據泄漏

2011-01-20 17:34:01

IPv6雅虎

2010-02-21 18:33:28

文件夾病毒照片影像U盤病毒

2023-05-30 20:19:20

2022-09-05 11:25:22

惡意瀏覽器Chrome惡意擴展

2011-12-26 15:31:33

2011-12-22 10:58:37

2021-04-02 11:09:35

MobiKwik 移動支付數據泄露

2010-05-04 22:32:37

手機木馬網絡安全360手機衛士

2015-02-09 10:14:33

2009-02-01 21:11:13

Facebook存儲數據中心

2013-12-12 17:03:57

Lua腳本語言

2024-01-09 07:42:46

Shutil 模塊Python 編程工具

2020-07-29 15:09:56

Dave數據泄露數據庫泄露

2023-01-31 17:07:06

2023-06-13 15:55:54

2012-08-01 10:45:40

Outlook

2012-07-04 09:28:41

我查查推廣運營Mary

2022-09-01 11:21:06

擴展惡意代碼
點贊
收藏

51CTO技術棧公眾號

日本不卡免费播放| 天堂网一区二区三区| 日韩欧国产精品一区综合无码| 国产尤物精品| 日韩av网址在线观看| 黄色a级片免费| 久蕉在线视频| 精品一区二区在线观看| 欧美—级高清免费播放| 中文人妻一区二区三区| 国产精品无码久久久久| 亚洲午夜在线视频| 色综合电影网| 日本国产在线观看| 六月丁香综合在线视频| 久久男人的天堂| 五月激情四射婷婷| 哺乳挤奶一区二区三区免费看| 国产精品你懂的| 国产成人精品自拍| 国产成人精品一区二三区| 精品日本12videosex| 精品欧美一区二区久久| 国产裸体舞一区二区三区| www在线免费观看视频| 久久综合狠狠综合| 999视频在线免费观看| 高潮毛片又色又爽免费 | 日韩网站在线| 色噜噜狠狠狠综合曰曰曰| 黑人巨大猛交丰满少妇| 香蕉成人影院| 欧美日韩中文在线| 欧美a级免费视频| 91福利在线视频| 久久综合国产精品| 国产在线精品日韩| 精品人妻伦一二三区久久| 免费成人在线影院| 国产精品video| 日韩三级一区二区三区| 亚洲欧美一级二级三级| xxxxx91麻豆| 日韩视频在线观看免费视频| 日韩大尺度在线观看| 日韩女优制服丝袜电影| 欧美又黄又嫩大片a级| 国产极品嫩模在线观看91精品| 国产精品久久久久久久久快鸭| 国产精品成久久久久三级| 精品视频一区二区在线观看| 偷偷www综合久久久久久久| 亚洲天堂成人在线| 久久久久久亚洲中文字幕无码| 欧美91在线|欧美| 精品成人乱色一区二区| 欧美精品久久久久久久自慰| 尤物在线网址| 亚洲欧美日韩在线| 91社在线播放| 麻豆视频网站在线观看| 中文字幕欧美一| 一区二区三视频| 国产一二区在线观看| 国产精品不卡在线| 老司机av福利| 香蕉久久aⅴ一区二区三区| 亚洲视频狠狠干| 亚洲激情免费视频| 日本乱理伦在线| 亚洲午夜精品久久久久久久久| 蜜桃麻豆91| 色猫av在线| 国产三级一区二区| 中文字幕乱码一区二区三区| 蜜桃视频网站在线观看| 亚洲日穴在线视频| 免费拍拍拍网站| 欧美裸体视频| 色狠狠av一区二区三区| 日韩av卡一卡二| 麻豆国产一区| 精品成a人在线观看| 亚洲国产综合视频| 国产a久久精品一区二区三区| 91麻豆精品国产无毒不卡在线观看| 国产亚洲精品久久久久久久| 免费电影网站在线视频观看福利| 久久久不卡网国产精品一区| 亚洲v国产v在线观看| 黄网站在线播放| 亚洲午夜久久久久| 日本一极黄色片| www.欧美| 日韩精品视频免费专区在线播放 | 日韩精品极品视频在线观看免费| 国产aⅴ一区二区三区| 成人免费视频视频在线观看免费 | 九九久久国产| 日韩区在线观看| 香港三级日本三级| 欧美色图国产精品| 久久久亚洲影院| 亚洲国产无线乱码在线观看| 国产精品系列在线观看| 日本一区二区三区免费观看| 欧洲美女少妇精品| 欧美日韩国产页| 在线观看免费不卡av| 久久夜色电影| 久久精品国产久精国产一老狼| 在线不卡av电影| 婷婷伊人综合| 欧洲成人免费aa| 精品国产九九九| 久久精品水蜜桃av综合天堂| 久久久天堂国产精品| 成人开心激情| 亚洲成成品网站| 亚洲一区电影在线观看| 久久福利精品| 高清视频在线观看一区| 毛片在线视频| 日本韩国一区二区| 亚洲一区二区在线免费| 希岛爱理一区二区三区| 国产精品aaaa| 外国精品视频在线观看 | 视频在线观看入口黄最新永久免费国产| 国产亚洲视频系列| 成人免费观看cn| 亚洲精品午夜| 欧美大片免费看| 国产麻豆免费观看| 中文字幕精品综合| 久久精品99国产| 亚洲va久久| 欧美在线不卡区| 四虎在线视频免费观看| 亚洲精品你懂的| 日本肉体xxxx裸体xxx免费| 日韩欧美在线精品| 97涩涩爰在线观看亚洲| 国产 日韩 欧美 综合| 亚洲日本一区二区三区| 精品综合久久久久| 国产精品成人a在线观看| 国产精品久久久av久久久| 国产资源在线观看| 色婷婷狠狠综合| 97人妻精品一区二区免费| 在线一区免费观看| 精品日产一区2区三区黄免费| 九色视频成人自拍| 色噜噜夜夜夜综合网| 日本xxxx裸体xxxx| 久久久噜噜噜| 色大师av一区二区三区| 成人国产在线| 色av吧综合网| 亚洲在线视频播放| 自拍偷拍国产亚洲| 国产精久久久久| 在线播放亚洲| 久久精品国产理论片免费| 人在线成免费视频| 亚洲男人av电影| 中日精品一色哟哟| 国产精品久久久久久福利一牛影视 | 中文字幕不卡在线| 中文久久久久久| 97精品一区| 91黄色精品| 爱啪啪综合导航| 亚洲精选中文字幕| 在线观看视频二区| 自拍视频在线观看一区二区| 韩国三级视频在线观看| 国产精品夜夜夜| 午夜老司机精品| 在线观看欧美| 性欧美激情精品| av一本在线| 日韩精品一区二区三区中文不卡| 性欧美精品中出| 精品一区二区在线看| 国产欧美自拍视频| 日本欧美韩国国产| 国产精品欧美亚洲777777 | 国产小视频91| 91午夜交换视频| 一区二区三区精品在线观看| 五十路六十路七十路熟婆 | 久久精品人人爽人人爽| 中文字幕第38页| 亚洲黄色av| 视频一区视频二区视频| 亚洲2区在线| 国产成人亚洲综合| 四虎影院观看视频在线观看| 亚洲毛片在线观看.| 国产日本精品视频| 色综合久久久久网| 男人的天堂久久久| 久久久久久久综合日本| 奇米777在线| 久久久久久9| 欧美日韩福利在线| 7777久久香蕉成人影院| 久久久久网址| 久久三级中文| 国产精品三级在线| 蜜桃av在线播放| 欧美人成在线视频| 尤物在线视频| 国产亚洲精品va在线观看| 欧美一区二区三区黄片| 欧美另类高清zo欧美| 无码人妻av免费一区二区三区| 久久久久久久久久久黄色| 日本成人在线免费| 免费成人在线观看视频| 国语对白做受xxxxx在线中国 | 亚洲欧洲日本国产| 人人精品亚洲| 成人精品一二区| 91丨精品丨国产| 日本中文字幕成人| 免费在线小视频| 97在线观看视频| av资源中文在线天堂| 九九九久久久久久| www.在线视频| 久久精品久久久久电影| 在线看av的网址| 最近中文字幕日韩精品| 国产私拍精品| 国产一区二区三区四区福利| 日本啊v在线| 亚洲欧美日韩久久久久久| 在线观看xxx| 日韩高清不卡av| 亚洲欧美综合在线观看| 亚洲美女av黄| 蜜桃成人在线视频| 亚洲欧美日韩天堂| 精品久久av| 亚洲欧美日韩中文视频| 97在线视频人妻无码| 欧美最猛性xxxxx直播| 中文字字幕在线中文| 一区二区三区不卡视频在线观看 | 欧美美女日韩| 高清欧美电影在线| 蜜臀av在线| 欧美精品在线播放| 国产一线二线在线观看| 久久九九热免费视频| 在线观看麻豆| 久久国产精品久久久久| 免费黄色网页在线观看| 色噜噜久久综合伊人一本| 香蕉视频免费在线播放| 丝袜亚洲欧美日韩综合| 日本中文字幕在线看| 久久久精品免费视频| 中文在线字幕免费观看| 欧美激情精品久久久久久变态| 欧美另类自拍| 亚洲欧洲日产国产网站| 欧美大片aaa| 亚洲精品一区中文| 国模精品一区二区| 神马国产精品影院av| 美女隐私在线观看| 午夜精品久久久久久久男人的天堂 | 国产精品国产馆在线真实露脸 | 在线午夜影院| 久久久精品亚洲| 成人福利片网站| 97视频网站入口| 久久毛片亚洲| 国产经典一区二区| 亚洲一区二区免费在线观看| 91在线在线观看| 青青久久av| 一区二区精品在线| 午夜视频一区| 日韩精品在线观看av| 日韩专区中文字幕一区二区| 国产自偷自偷免费一区 | 中文字幕免费精品一区| 成人av福利| 97久久国产精品| 欧美123区| 国产精品视频一区二区三区经| 精品久久99| 91在线观看网站| 日韩成人激情| 男人天堂av片| 人禽交欧美网站| 精品人妻伦一二三区久| 国产亚洲精品bt天堂精选| 国产精品久久久视频| 亚洲国产精品久久久男人的天堂| 99久久精品久久亚洲精品| 夜夜嗨av一区二区三区四季av| 黄色一级大片在线免费观看| 亚洲国产视频a| 中文字幕av网站| 欧美视频日韩视频在线观看| 亚洲成熟女性毛茸茸| 亚洲欧美福利视频| 免费观看成人高潮| 国产成人精品在线播放| 精品福利在线| 国产亚洲福利社区| 久久久国产精品| 黄色片久久久久| 国产福利一区二区三区在线视频| 国产嫩草在线观看| 99热这里都是精品| 欧美日韩午夜视频| 一本高清dvd不卡在线观看| 人妻一区二区三区四区| 国产一区二区三区视频| 51精品视频| 99在线国产| 91精品综合久久久久久久久久久| 国产福利片一区二区| 国产精品日本| 亚洲精品乱码久久久久久9色| 麻豆成人在线观看| 素人fc2av清纯18岁| 亚洲在线成人精品| 在线观看色网站| 在线视频亚洲欧美| 久草免费在线视频| 国产欧美日韩亚洲| 欧美日韩一区二区高清| jizz大全欧美jizzcom| 国产女人18水真多18精品一级做| 亚洲天堂最新地址| 色婷婷综合五月| 国产精品久久一区二区三区不卡| 亚洲午夜久久久影院| av免费不卡| 国产手机精品在线| 欧美色图麻豆| 日韩精品视频网址| 悠悠色在线精品| 国产精品高潮呻吟AV无码| 日韩精品中文字幕在线播放| 黄色在线观看www| 国产美女精品在线观看| 欧美激情综合色综合啪啪| www.51色.com| 亚洲欧美视频一区| 男人天堂网在线视频| 欧美激情欧美激情| 亚洲成人黄色| 国产伦精品一区二区三区四区视频_| 日韩国产欧美在线视频| 日韩 中文字幕| 一本色道久久综合狠狠躁的推荐| 91国产精品一区| 一区二区国产精品视频| 亚洲国产综合在线观看| 一区二区国产日产| 成人在线视频一区| 偷偷操不一样的久久| 亚洲电影中文字幕| 欧美18av| 亚洲综合欧美日韩| 粉嫩av一区二区三区| 久久视频免费看| 精品国产免费人成电影在线观看四季| 国产裸舞福利在线视频合集| 国产精品黄视频| 久久精品青草| 人妻少妇精品视频一区二区三区| 国产精品麻豆欧美日韩ww| 这里只有久久精品视频| 久久国产精品电影| 好吊妞国产欧美日韩免费观看网站| 中文字幕一区二区三区最新| 国产一区二区看久久| 唐朝av高清盛宴| 亚洲免费中文字幕| 国产成人77亚洲精品www| 日本不卡一区二区三区在线观看| 欧美独立站高清久久| 久久精品无码一区二区三区毛片| 欧美国产激情一区二区三区蜜月| 精品亚洲永久免费| 国产婷婷色综合av蜜臀av| 性欧美video另类hd尤物| 日韩人妻无码精品久久久不卡| 日本成人在线不卡视频| 精品一区在线视频|