日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

day5-shutil模块

發布時間:2025/3/8 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()

?小結

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

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

    總結

    以上是生活随笔為你收集整理的day5-shutil模块的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。