shutil模塊:文件的高級操作,包括文件、文件夾和壓縮包處理。

shutil模塊

image.png

shutil模塊是針對文件的高級操作,包括文件、文件夾和壓縮包處理。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
===========================
# @Time : 2020/9/1 23:02
# @File  : shutil_.py
# @Author: adeng
# @Date  : 2020/9/1
============================
"""
import shutil

# 01.將文件內容拷貝到另一個文件中
# shutil.copyfileobj(fsrc, fdst[, length])
shutil.copyfileobj(open("01.txt","rb"), open("02.txt","wb"))

# 02 拷貝文件
# shutil.copyfile(src, dst)
shutil.copyfile("01.txt","03.txt")  #dst 目標文件無需存在


# 03 僅拷貝權限。內容、組、用戶均不變
# shutil.copymode(src, dst)

shutil.copymode("01.txt","03.txt") # 目標文件必須存在


# 04 僅拷貝狀態(tài)的信息,包括:mode bits, atime, mtime, flags
# shutil.copystat(src, dst)

shutil.copystat("01.txt","02.txt") #目標文件必須存在


# 05 拷貝文件和權限:dst無需存在
# shutil.copy(src, dst)
shutil.copy("01.txt","02.txt") # 拷貝文件和權限,相當與 copyfile()+ copymode()


# 06 拷貝文件和狀態(tài)信息 :dst文件無需存在
# shutil.copy2(src, dst)
shutil.copy2("01.txt","04.txt") # 相當與 copyfile()+ copystat()

# 07 遞歸的去拷貝文件夾
# shutil.copytree(src, dst, symlinks=False, ignore=None)
# 目標目錄不能存在,注意對folder2目錄父級目錄要有可寫權限,ignore的意思是排除
# shutil.ignore_patterns() # 不拷貝指定文件
# shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))

# shutil.copytree("f1","f2",ignore=shutil.ignore_patterns("*.txt","test*")) # f2文件必須不存在,.text結尾和test開頭的不拷貝

'''
shutil.copytree('f1', 'f2', symlinks=True, ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
通常的拷貝都把軟連接拷貝成硬鏈接,即對待軟連接來說,創(chuàng)建新的文件
'''


# 08 遞歸的去刪除文件
# shutil.rmtree(path[, ignore_errors[, onerror]])

shutil.rmtree('f2')

# 09 遞歸的去移動文件,它類似剪切。原文件會消失
# shutil.move(src, dst)

shutil.move('f1', 'f2')

"""
10 shutil.make_archive(base_name, format,...)

創(chuàng)建壓縮包并返回文件路徑,例如:zip、tar

base_name: 壓縮包的文件名,也可以是壓縮包的路徑。只是文件名時,則保存至當前目錄,否則保存至指定路徑,
如 data_bak                       =>保存至當前路徑
如:/tmp/data_bak =>保存至/tmp/
format: 壓縮包種類,“zip”, “tar”, “bztar”,“gztar”
root_dir:   要壓縮的文件夾路徑(默認當前目錄)
owner:  用戶,默認當前用戶
group:  組,默認當前組
logger: 用于記錄日志,通常是logging.Logger對象
"""
#將 /f2 下的文件打包放置當前程序目錄

ret = shutil.make_archive("data_bak", 'gztar', root_dir='f2')

#將 /f2 下的文件打包放置 /tmp/目錄

ret1 = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir="f2")
pass


# shutil 對壓縮包的處理是調用 ZipFile 和 TarFile 兩個模塊來進行的,詳細:


"""
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(path='.')
z.close()



import tarfile

# 壓縮
t=tarfile.open('/tmp/egon.tar','w')
t.add('/test1/a.py',arcname='a.bak')
t.add('/test1/b.py',arcname='b.bak')
t.close()


# 解壓
t=tarfile.open('/tmp/egon.tar','r')
t.extractall('/egon')
t.close()

"""
image.png
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容