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