shutil模块
image.pngshutil模块是针对文件的高级操作,包括文件、文件夹和压缩包处理。
#!/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 仅拷贝状态的信息,包括: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 拷贝文件和状态信息 :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*'))
通常的拷贝都把软连接拷贝成硬链接,即对待软连接来说,创建新的文件
'''
# 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,...)
创建压缩包并返回文件路径,例如: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
网友评论