day5模塊學習--shutil模塊

来源:http://www.cnblogs.com/gengcx/archive/2017/07/23/7223763.html
-Advertisement-
Play Games

shutil模塊 高級的 文件、文件夾、壓縮包 處理模塊 os模塊提供了對目錄或者文件的新建/刪除/查看文件屬性,還提供了對文件以及目錄的路徑操作。比如說:絕對路徑,父目錄…… 但是,os文件的操作還應該包含移動 複製 打包 壓縮 解壓等操作,這些os模塊都沒有提供。 而本文所講的shutil則就是 ...


shutil模塊

高級的 文件、文件夾、壓縮包 處理模塊

os模塊提供了對目錄或者文件的新建/刪除/查看文件屬性,還提供了對文件以及目錄的路徑操作。比如說:絕對路徑,父目錄……  但是,os文件的操作還應該包含移動 複製  打包 壓縮 解壓等操作,這些os模塊都沒有提供。
而本文所講的shutil則就是對os中文件操作的補充。--移動 複製  打包 壓縮 解壓。

    1、shutil.copyfileobj(fsrc, fdst[, length])

    import shutil
  f1 = open("alexsb","r",encoding="utf-8")

  f2 = open("文件2","w",encoding='utf-8')
  shutil.copyfileobj(f1,f2)
  f1.close()
  f2.close()
    把一個文件複製到另外一個文件,記得要同時打開兩個文件,如果是Windows,要加上encoding="utf-8",以"utf-8"讀取和複製。

    2、shutil.copyfile(src, dst)

    源代碼:從下麵源代碼可以看出,copyfile()方法自己打開模塊,不需要我們再去打開模塊,第一個模塊是以"rb"模式打開,第二個模式是以"wb"模式打開,如果文件存在,從衝掉之前文件裡面的內容。

def copyfile(src, dst, *, follow_symlinks=True):
  if _samefile(src, dst):
    raise SameFileError("{!r} and {!r} are the same file".format(src, dst))
  for fn in [src, dst]:
    try:
      st = os.stat(fn)
    except OSError:
      # File most likely does not exist
      pass
    else:
      # XXX What about other special files? (sockets, devices...)
      if stat.S_ISFIFO(st.st_mode):
        raise SpecialFileError("`%s` is a named pipe" % fn)
  if not follow_symlinks and os.path.islink(src):
    os.symlink(os.readlink(src), dst)
  else:
    with open(src, 'rb') as fsrc:
      with open(dst, 'wb') as fdst:
        copyfileobj(fsrc, fdst)
  return dst

    import shutil
  shutil.copyfile("文件2","文件3")

    shutil.copyfile("被賦值文件","賦值文件")也是賦值文件,只是不需要打開文件,把一個文件賦值到另外一個文件中,如果這個文件不存在,則新建一個文件。   

    3.shutil.copymode(src, dst)

    僅拷貝許可權。內容、組、用戶均不變

    def copymode(src,dst):

    '''Copy mode bits from src to dst'''

      if hasattr(os,"chmod"):

      st = os.stat(src)

      mode = stat.S_IMODE(st,st_mode)

      os.chmod(dst,mode)

    在Linux平臺上,文件有很多許可權,shutil.copymode(src,dst)只讓用戶copy許可權,不複製文件內容。

    4.shutil.copystat(src, dst)

    拷貝狀態的信息,包括:mode bits, atime, mtime, flags

    import shutilf1 = open("文件2","rb")
  f2 = open("文件4","wb")
  shutil.copystat("文件2","文件4")

    5.shutil.copy(src, dst)     

    複製文件的內容以及許可權,先copyfile後copymode

    6.shutil.copy2(src, dst)

    複製文件的內容以及文件的所有狀態信息。先copyfile後copystat  

    7.shutil.ignore_patterns(*patterns)

    8.shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False)

    遞歸的複製文件內容及狀態信息

    shutil.copytree()遞歸地copy目錄和文件,等於複製了一份完全一樣的源文件。

    import shutil
    shutil.copytree("copytrees","new_copytrees")

    創建一個一模一樣的目錄和文件,複製裡面所有的內容,這個功能還是很強大的。就相當於直接點擊複製粘貼。

    9.shutil.rmtree(path[, ignore_errors[, onerror]])

    遞歸的去刪除文件

    import shutil
  shutil.rmtree("new_copytrees")

    shutil.rmtree(path)是遞歸的刪除文件,即便文件裡面有內容也能夠刪除,我們知道,os.rmdir()如果文件有內容是不能刪除的,相比較,系統的功能是強大很多,從底層刪除文件。

    10.shutil.move(src, dst)

    遞歸的去移動文件

    11.shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0,dry_run=0, owner=None, group=None, logger=None)

    創建壓縮包並返迴文件路徑,例如:zip、tar

    (1)base_name:壓縮包的文件名,也可以是壓縮包的路徑。只是文件名時,則保存至當前目錄,否則保存至指定路徑,

                 如:www     >>保存至當前路徑

         如:/users/wupeiqi/www   ==>>保存至/Users/wupeiqi/下麵

    (2)format:壓縮包種類,"zip","tar","bztar","gztar"

    (3)root_dir:要壓縮的文件夾路徑(預設當前目錄)

    (4)owner:用戶,預設當前用戶

  (5)logger:用於記錄日誌,通常是logging.Logger對象

    #將 /Users/wupeiqi/Downloads/test 下的文件打包放置當前程式目錄

    import shutil
  ret = shutil.make_archive("只能壓縮文件", 'gztar', root_dir='/home/zhuzhu/第五天/copytrees')

    #將 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目錄  

    import shutil

  ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

    make_archive()只能壓縮目錄(directory),不能壓縮文件(file)或這.py文件,只能是整體把文件目錄進行壓縮。

    shutil對文件的壓縮是通過調用zipfile和tarfile來進行壓縮的。

    zipfile  模塊壓縮解壓

    zipfile能夠指定壓縮那個目錄的文件,就是可以自助定義壓縮,也是比較好的,我們可以壓縮文件,shutil只能整體壓縮目錄,而zipfile能夠壓縮各個文件(File)類型。

    實例如下:

    壓縮

    import zipfile
  '''調用zipfile模塊,隨便壓縮問價'''

  z = zipfile.ZipFile("想壓誰壓誰.zip","w")     #創建一個壓縮包
  z.write("/home/zhuzhu/第五天/文件2")          #向壓縮包添加壓縮文件2
  z.write("/home/zhuzhu/第五天/time_sleep.py")  #向壓縮包添加Python腳本time_sleep.py
  z.close()    #關閉壓縮文件

    解壓

   import zipfile
  '''調用zipfile模塊解壓文件'''

  z = zipfile.ZipFile("想壓誰壓誰.zip","r") #解壓文件
  z.extractall() #調用extract()解壓
  z.close()

   tarfile  模塊壓縮解壓

    tar壓縮

    import tarfile

  z = tarfile.open("test.tar","w")
  '''打開壓縮文件,如果壓縮包不存在,則重新創建,如果存在,則刪除裡面的內容'''
  z.add("/home/zhuzhu/第五天/文件3") #向壓縮包添加壓縮文件
  z.add("/home/zhuzhu/第五天/sys_argv.py")
  z.close() #關閉壓縮包
    tar解壓

    import tarfile
  '''解壓文件'''

  z = tarfile.open("test.tar","r")
  z.extractall()
  z.close()

    zipfile和tarfile壓縮解壓文件。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 轉自此人博客 #include<bister> using std::bitset; 一句話定義:可自定義位數,用作記錄二進位的數據類型. 一,定義和初始化 bitset<n> b; //b有n位,每位都為0; bitset<n> b(u); //b是unsigned long型u的副本 bitse ...
  • 將實現類通過網路的方式下載下來,以達到動態載入的目的 git地址:https://coding.net/u/mich/p/easytry/git/tree/master/src/com/netclassloader ...
  • 捲積神經網路(Convolutional Neural Network,CNN),可以解決圖像識別、時間序列信息問題。深度學習之前,藉助SIFT、HoG等演算法提取特征,集合SVM等機器學習演算法識別圖像。 SIFT,縮放、平移、旋轉、視角轉變、亮度調整畸變的一定程度內,具有不變性。有局限性,Image ...
  • shelve模塊 shelve類似於一個key-value資料庫,可以很方便的用來保存Python的記憶體對象,其內部使用pickle來序列化數據,簡單來說,使用者可以將一個列表、字典、或者用戶自定義的類實例保存到shelve中,下次需要用的時候直接取出來,就是一個Python記憶體對象,不需要像傳統數 ...
  • 程式聲明將整型變數的類型告訴了C++編譯器,但編譯器如何知道常量類型呢? 除非有理由(如使用特殊尾碼,或者值太大無法存儲為int),不然都將存儲為int類型 尾碼是放在數字常量後面的字母 l、L表示long常量 u、U表示unsigned int ul(UL)或lu(LU)表示unsigned in ...
  • 我們以騰訊社招頁面來做示例:http://hr.tencent.com/position.php?&start=0#a 如上圖,使用BeautifulSoup4解析器,將圖1中229頁,每頁10個招聘信息,共2289個招聘信息中的職位名稱、職位類別、招聘人數、工作地點、工作職責、工作要求、詳情鏈接等 ...
  • Message Digest Algorithm MD5(中文名為消息摘要演算法第五版)為電腦安全領域廣泛使用的一種散列函數,用以提供消息的完整性保護。該演算法的文件號為RFC 1321(R.Rivest,MIT Laboratory for Computer Science and RSA Data ...
  • 在我們做後臺刪除的時候,當點擊刪除標簽時,你希望彈出一個友好的提示框!比如這樣: 那代碼應該怎樣寫呢?向下麵這樣? 你會發現會發生這樣一個錯誤: 該函數沒有被使用?不應該啊,我在php裡面不是已經調用了麽? 註意: 想必寫過前端的人都知道這個方法是在頁面全部載入完成之後執行,那麼問題就來了,php的 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...