# ### tarfile 壓縮模塊 後綴爲.tar | .tar.gz | .tar.bz2
import tarfile
tarfile在win中功能不全,腎用,熬夜bug # ### 1.建立tar壓縮包 [官方: 理論上能夠壓縮到最小的模式是bz2]# (1) 建立壓縮包""".tar的壓縮包,只打包不壓縮 276480""" tf = tarfile.open("ceshi1029.tar","w",encoding="utf-8")# (2) 寫入文件到壓縮包中tf.add("/bin/ntfscmp","ntfscmp")tf.add("/bin/openvt","openvt")tf.add("/bin/grep","tmp/grep")# (3) 關閉壓縮包tf.close()# 2.建立.tar.gz壓縮包 120462tf = tarfile.open("ceshi1030.tar.gz","w:gz",encoding="utf-8")tf.add("/bin/ntfscmp","ntfscmp")tf.add("/bin/openvt","openvt")tf.add("/bin/grep","tmp/grep")tf.close()# 3.建立.tar.bz2壓縮包 115728tf = tarfile.open("ceshi1031.tar.bz2","w:bz2",encoding="utf-8")tf.add("/bin/ntfscmp","ntfscmp")tf.add("/bin/openvt","openvt")tf.add("/bin/grep","tmp/grep")tf.close()# ### 2.解壓壓縮包tf = tarfile.open("ceshi1030.tar.gz","r",encoding="utf-8")# extract(文件,路徑)# tf.extract("ntfscmp","ceshi1030")# extractall(路徑)tf.extractall("ceshi1030")tf.close()# ### 3.追加文件 支持with語法with tarfile.open("ceshi1029.tar","a",encoding="utf-8") as tf : tf.add("/bin/gzip","gzip")# error tarfile中的追加,只能是對只打包不壓縮的包進行追加,其餘的模式不能夠;"""with tarfile.open("ceshi1031.tar.bz2","a",encoding="utf-8") as tf: tf.add("/bin/gzip","gzip")"""# ### 4.查看壓縮包中的內容with tarfile.open("ceshi1029.tar","r",encoding="utf-8") as tf : lst = tf.getnames() print(lst)# ### 如何解決tarfile中存在的缺陷?(不能追加文件到已經壓縮的包)"""(1) 先解壓全部文件到文件夾(2) 把想要追加的內容複製到文件夾中(3) 通過過濾篩選,從新打包壓縮"""import os# 獲取當前腳本所在的路徑pathvar = os.getcwd()# print(res) # /mnt/hgfs/gongxiang8/day16# 壓縮包路徑path1 = os.path.join(pathvar,"ceshi1031.tar.bz2")print(path1)# 解壓的路徑path2 = os.path.join(pathvar,"ceshi1031")# (1) 先解壓全部文件到文件夾with tarfile.open( path1 , "r",encoding="utf-8") as tf: tf.extractall(path2)# (2) 把想要追加的內容複製到文件夾中mybin = "cp -a /bin/ip " + path2 # cp -a /bin/ip /mnt/hgfs/gongxiang8/day16/ceshi1031os.system(mybin)# (3) 通過過濾篩選,從新打包壓縮lst = os.listdir(path2)print(lst)with tarfile.open(path1,"w:bz2",encoding="utf-8") as tf: for i in lst: if i != "openvt": # 拼接絕對路徑 pathnew = os.path.join(path2,i) # add(路徑,別名) tf.add(pathnew,i)