day5-shutil模塊

一、簡述

  我們在日常處理文件時,經常用到os模塊,但是有的時候你會發現,像拷貝、刪除、打包、壓縮等文件操作,在os模塊中沒有對應的函數去操作,下面我們就來講講高級的 文件、文件夾、壓縮包 處理模塊:shutil

二、模塊詳解

1、shutil.copyfileobj(fsrc, fdst)

功能:把一個文件的內容拷貝到另外一個文件中,可以是部分文件內容。

with open("f_old",'r',encoding="utf-8") as f1,\open("f_new","w",encoding="utf-8") as f2:shutil.copyfileobj(f1,f2)    #拷貝文件的內容

注:經過試驗,目前試驗不出可以拷貝部分文件內容,先忘記可以拷貝部分內容把。

2、shutil.copyfile(src, dst)

功能:拷貝文件,但是不拷貝所有權限

shutil.copyfile("f_old","f_new")  #同一目錄下拷貝文件
shutil.copyfile(r'D:\PycharmProjects\pyhomework\day5\shutil_mode\shutil_mod\f_old',r'd:\f_new')    #通過絕對路徑拷貝文件

3、shutil.copymode(src, dst)

功能:拷貝文件的文件權限

[root@whtest137 ~]# ll
total 8
-rwxr-xr-x 1 root   root   0 Apr  1 16:05 zhangqigao   #有執行權限
-rw-r--r-- 1 whtest whtest 0 Apr  1 16:06 zhangqigao_old  #沒有執行權限
>>> import os,shutil
>>> os.chdir("/root")
#拷貝"zhangqigao_old"權限給"zhangqigao"
>>> shutil.copymode("zhangqigao_old","zhangqigao")  
[root@whtest137 ~]# ll
total 8
-rw-r--r-- 1 root   root   0 Apr  1 16:05 zhangqigao  # 獲得跟"zhangqigao_old"一樣的文件權限
-rw-r--r-- 1 whtest whtest 0 Apr  1 16:06 zhangqigao_old

4、shutil.copystat(src, dst)

功能:拷貝文件的狀態信息,如:mode bits, atime, mtime, flags

#兩個文件的創建時間和用戶權限都不同
[root@jenkins_sh temp]# ll
total 0
-rw-r--r-- 1 root    root    0 Apr  1 17:31 zhangqigao 
-rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old
#python操作
>>> import os,shutil 
>>> os.chdir("/temp")
#zhangqigao 這個文件狀態
>>> os.stat("zhangqigao")
posix.stat_result(st_mode=33188, st_ino=76808194, st_dev=2053L, st_nlink=1, 
st_uid=0, st_gid=0, st_size=0, st_atime=1491039109, st_mtime=1491039109, 
st_ctime=1491039109)
#zhangqigao_old的文件狀態
>>> os.stat("zhangqigao_old")
posix.stat_result(st_mode=33261, st_ino=76808195, st_dev=2053L, st_nlink=1, 
st_uid=101, st_gid=103, st_size=0, st_atime=1491035188, st_mtime=1491035188, 
st_ctime=1491035242)
#拷貝zhangqigao_old 文件狀態給zhangqigao 文件
>>> shutil.copystat("zhangqigao_old","zhangqigao")
# 拷貝后,zhangqigao文件的文件狀態
>>> os.stat("zhangqigao")
posix.stat_result(st_mode=33261, st_ino=76808194, st_dev=2053L, st_nlink=1, 
st_uid=0, st_gid=0, st_size=0, st_atime=1491035188, st_mtime=1491035188, 
st_ctime=1491039237)#操作后兩個文件比較
[root@jenkins_sh temp]# ll
total 0
-rwxr-xr-x 1 root    root    0 Apr  1 16:26 zhangqigao  #狀態包括文件權限,文件創建的時間等,不包括文件所屬用戶和用戶組
-rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old

5、shutil.copy(src, dst)

功能:拷貝文件和文件的權限

#拷貝前
[root@jenkins_sh temp]# ll
total 0
-rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old
#拷貝中
>>> import os,shutil
>>> os.chdir("/temp")
>>> shutil.copy("zhangqigao_old","zhangqigao") 
#拷貝結果輸出
[root@jenkins_sh temp]# ll
total 0
-rwxr-xr-x 1 root    root    0 Apr  1 17:42 zhangqigao  #拷貝了zhangqigao_old文件和文件權限
-rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old

6、shutil.copy2(src, dst)

功能:拷貝文件和文件的狀態

#拷貝前
[root@jenkins_sh temp]# ll
total 0
-rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old
#拷貝中
>>> import os,shutil
>>> os.chdir("/temp")
>>> shutil.copy2("zhangqigao_old","zhangqigao")
#拷貝后
[root@jenkins_sh temp]# ll
total 0
-rwxr-xr-x 1 root    root    0 Apr  1 16:26 zhangqigao  #拷貝了zhangqigao_old的文件和狀態
-rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old

7、shutil.copytree(src, dst)

?功能:遞歸的去拷貝文件,相當于cp -r

#操作前
[root@jenkins_sh temp]# ll
total 4
drwxr-xr-x 2 root root 4096 Apr  1 17:53 xiaogao
[root@jenkins_sh temp]# cd xiaogao/;ll
total 0
-rwxr-xr-x 1 root    root    0 Apr  1 16:26 zhangqigao
-rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old
#操作中
>>> import os,shutil
>>> os.chdir("/temp")
>>> shutil.copytree("xiaogao","gaogao")  #遞歸拷貝
#操作結果
[root@jenkins_sh temp]# ll
total 8
drwxr-xr-x 2 root root 4096 Apr  1 17:53 gaogao   #拷貝成功
drwxr-xr-x 2 root root 4096 Apr  1 17:53 xiaogao
[root@jenkins_sh temp]# cd gaogao/;ll
total 0
-rwxr-xr-x 1 root root 0 Apr  1 16:26 zhangqigao
-rwxr-xr-x 1 root root 0 Apr  1 16:26 zhangqigao_old

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

功能:遞歸的去刪除文件,相當于:rm -fr

#操作前
[root@jenkins_sh temp]# ll
total 4
drwxr-xr-x 2 root root 4096 Apr  1 17:53 xiaogao
[root@jenkins_sh temp]# cd xiaogao/;ll
total 0
-rwxr-xr-x 1 root    root    0 Apr  1 16:26 zhangqigao
-rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old
#操作中
>>> import os,shutil
>>> os.chdir("/temp")
>>> shutil.rmtree("xiaogao")
#操作結果
[root@jenkins_sh temp]# ll
total 0    #成功刪除xiaogao目錄

10、shutil.move(src, dst)

功能:遞歸的去移動文件 相當于:mv

#操作前
[root@jenkins_sh temp]# ll
total 4
drwxr-xr-x 2 root root 4096 Apr  1 18:07 xiaogao
-rw-r--r-- 1 root root    0 Apr  1 18:07 zhangqigao
#操作中
>>> import shutil
>>> shutil.move("/temp/zhangqigao","/temp/xiaogao")   #把文件移到目錄中
#操作結果
[root@jenkins_sh xiaogao]# ll
total 4
drwxr-xr-x 2 root root 4096 Apr  1 18:08 xiaogao
[root@jenkins_sh temp]# cd xiaogao/;ll
total 0
-rw-r--r-- 1 root root 0 Apr  1 18:07 zhangqigao

?三、壓縮解壓縮

1、shutil.make_archive((base_name, format, root_dir=None,base_dir=None,verbose=0,dry=0,owner=None,group=None,logger=None)

功能:創建壓縮包并且返回文件路徑,例如:zip,tar

  • base_name : 壓縮包的文件名,也可以是壓縮包的路徑。只是文件名,則保存當前目錄,否則保存到指定路徑。
  • format:壓縮包種類,'zip','tar','bztar','gztar'
  • root_dir:需要壓縮的文件夾路徑(默認當前路徑)
  • owner:用戶,默認當前用戶
  • group:組,默認當前組
  • logger:用于記錄日志,通常是logging.Logger對象
#指定路徑
>>> import shutil
#把/temp下的xiaogao文件以zip壓縮格式壓縮,并且存放在/temp/zhangqigao目錄下,"/temp/zhangqigao/xiaogao" 中的xiaogao是壓縮名
>>> shutil.make_archive("/temp/zhangqigao/xiaogao",'zip',"/temp/xiaogao")    
'/temp/zhangqigao/xiaogao.zip'    #壓縮結果
#默認當前路徑
>>> shutil.make_archive("xiaogao",'zip',"/temp/xiaogao")                 
'/temp/xiaogao.zip'

2、zipfile

功能:以zip的形式壓縮文件,注意了這個只能壓縮文件,不能壓縮目錄,如果壓縮,也只能顯示空目錄。

import zipfile# 壓縮
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')  #寫入
z.write('data.data')
z.close()   #關閉# 解壓
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall()   #解壓
z.close()

3、tarfile

功能:以tar的形式打包文件,這邊能打包所以文件,包括目錄

import tarfile# 打包
tar = tarfile.open('your.tar','w')#不加arcname打的是絕對路徑,也就是/Users/wupeiqi/PycharmProjects/bbs2.zip,加這個表示你在your.tar中加什么文件就寫什么文件名,也就是bbs2.zip
tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip') 
tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
tar.close()# 解壓
tar = tarfile.open('your.tar','r')
tar.extractall()  # 可設置解壓地址
tar.close()

?小結

  1. tar打包不會壓縮文件,所以文件的大小沒有變
  2. zip才會壓縮,所以壓縮后的文件大小會變小
  3. 一般情況下是先打包再壓縮

?

轉載于:https://www.cnblogs.com/zhangqigao/articles/6655910.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541671.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541671.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541671.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

matlab中now函數_now()方法以及JavaScript中的示例

matlab中now函數JavaScript now()方法 (JavaScript now() method) now() method is a Date class method, it is used to current time in milliseconds, it returns the total number of milliseconds since 01st January 1970, 00:00:00 UTC. now()方法是Date類的一種方法&am…

android 集成x5內核時 本地沒有,騰訊瀏覽服務-接入文檔

三、SDK集成步驟1. 第一步下載 SDK jar 包放到工程的libs目錄下,將源碼和XML里的系統包和類替換為SDK里的包和類,具體對應如下:系統內核SDK內核android.webkit.ConsoleMessagecom.tencent.smtt.export.external.interfaces.ConsoleMessageand…

java vector_Java Vector sureCapacity()方法與示例

java vector向量類別sureCapacity()方法 (Vector Class ensureCapacity() method) ensureCapacity() method is available in java.util package. sureCapacity()方法在java.util包中可用。 ensureCapacity() method is used to ensure the capacity of this Vector when requi…

Tcl與Design Compiler (十二)——綜合后處理

本文如果有錯,歡迎留言更正;此外,轉載請標明出處 http://www.cnblogs.com/IClearner/ ,作者:IC_learner 概述 前面也講了一些綜合后的需要進行的一些工作,這里就集中講一下DC完成綜合了,產生了…

Java短類的compareTo()方法和示例

簡短的類compareTo()方法 (Short class compareTo() method) compareTo() method is available in java.lang package. compareTo()方法在java.lang包中可用。 compareTo() method is used to check equality or inequality for this Short object against the given Short obj…

四則運算網頁版

一.設計思想: 1)寫出一個菜單界面,有兩個選項一個是分數,一個是整數。 2)而這兩個標簽后面則是轉向其更詳細的菜單,題目數量,有無括號,運算的項數等等詳細功能,再點擊這兩…

Java RandomAccessFile seek()方法與示例

RandomAccessFile類seek()方法 (RandomAccessFile Class seek() method) seek() method is available in java.io package. seek()方法在java.io包中可用。 seek() method is used to sets the file pointer position calculated from the starting of this file at which the …

Javascript開發技巧(JS中的變量、運算符、分支結構、循環結構)

一、Js簡介和入門 繼續跟進JS開發的相關教程。 <!-- [使用JS的三種方式] 1、HTML標簽中內嵌JS&#xff08;不提倡使用&#xff09;&#xff1a; 示例&#xff1a;<button οnclick"javascript:alert(你真點啊&#xff01;)">有本事點我呀&#xff01;&#…

android 顏色范圍,Android系統顏色的適用范圍

###All Clickable Views:ripple effect (Lollipop only) — “colorControlHighlight”###Status Bar:background (Lollipop only) – “colorPrimaryDark”###Navigation Bar:background (Lollipop only) – “android:navigationBarColor”###EditText:underline (unfocused)…

bytevalue_Java Short類byteValue()方法及示例

bytevalue短類byteValue()方法 (Short class byteValue() method) byteValue() method is available in java.lang package. byteValue()方法在java.lang包中可用。 byteValue() method is used to return the value denoted by this Short object converted to type byte (by …

分布式交換機配置備份和還原

1.備份和還原vSphere Distributed Switch配置 1.1導出 vSphere Distributed Switch 配置 可以將 vSphere Distributed Switch 和分布式端口組配置導出到某一文件。該文件保留有效的網絡配置&#xff0c;使這些配置能夠傳輸至其他環境。 步驟&#xff1a; 1) 在 vSphere Web Cli…

html自動執行函數,JS 自執行函數原理及用法

js自執行函數&#xff0c;聽到這個名字&#xff0c;首先會聯想到函數。接下來&#xff0c;我來定義一個函數&#xff1a;function aaa(a,b){return sum a b}定義了一個名為aaa的函數&#xff0c;在里面可以計算兩個數的和。如果想執行它&#xff0c;就必須得調用它&#xff0…

java reverse_Java Integer類reverse()方法與示例

java reverse整數類reverse()方法 (Integer class reverse() method) reverse() method is available in java.lang package. reverse()方法在java.lang包中可用。 reverse() method is used to returns the value generated by reversing the order of bits in binary 2s comp…

華為鴻蒙系統好在哪,華為鴻蒙2.0可以替代安卓嗎,華為鴻蒙2.0優勢在哪

在華為開發者大會上&#xff0c;華為消費業務CEO 余承東&#xff0c;正式發布鴻蒙OS2.0&#xff0c;并宣布華為鴻蒙OS將全面啟用全場景生態&#xff0c;并將于2020年12月發布手機版。余承東還表示&#xff0c;明年&#xff0c;華為的智能手機將全面升級&#xff0c;以支持鴻蒙操…

Java GregorianCalendar add()方法與示例

GregorianCalendar類的add()方法 (GregorianCalendar Class add() method) add() method is available in java.util package. add()方法在java.util包中可用。 add() method is used to add the given quantity to the specified GregorianCalendar field (fi). add()方法用于…

JVM(三)——對象的訪問定位

JVM&#xff08;三&#xff09;——對象的訪問定位創建完對象&#xff0c;到了使用對象的時候&#xff0c;通常聲明一個同類型的引用指向該類型的對象&#xff0c;由這個引用來操作對象的字段、方法等。 Object obj new Object();復制代碼我們的Java程序需要通過棧上的 refere…

html5滑動刪除置頂,html5向左滑動刪除特效

html5向左滑動刪除特效* {padding: 0;margin: 0;list-style: none;}header {background: #f7483b;border-bottom: 1px solid #ccc}header h2 {text-align: center;line-height: 54px;font-size: 16px;color: #fff}.list-ul {overflow: hidden}.list-li {line-height: 60px;bord…

Java Double類hashCode()方法及示例

雙類hashCode()方法 (Double class hashCode() method) hashCode() method is available in java.lang package. hashCode()方法在java.lang包中可用。 hashCode() method is used to return hashcode of the Double-object. hashCode()方法用于返回Double對象的哈希碼。 hashC…

Java DataOutputStream size()方法及示例

DataOutputStream類的size()方法 (DataOutputStream Class size() method) size() method is available in java.io package. size()方法在java.io包中可用。 size() method is used to return the size of this stream or in other words, we can say it returns the value of…

html怎樣讓列表向下移動,Html無序列表ul控件實現行上下移動.

new document // 創建一個ulvar ul document.createElement("ul");ul.id "oList";// 創建divvar div document.getElementById(mergeCase);// 把ul放置到div中div.appendChild(ul);// 遍歷所有的li條目function trace(){var strTest "";for …