python(6)-shutil模块

高级的 文件、文件夹、压缩包 处理模块

shutil.copyfileobj(fsrc, fdst[, length])

将文件内容拷贝到另一个文件中:

#源码
def copyfileobj(fsrc, fdst, length=16*1024):
    """copy data from file-like object fsrc to file-like object fdst"""
    while 1:
        buf = fsrc.read(length)
        if not buf:
            break
        fdst.write(buf)
#复制文件
import shutil

f = open(‘settings.py‘, ‘rb‘)
f1 = open(‘aaa.py‘, ‘wb‘)

shutil.copyfileobj(f, f1, length=20)

f.close()
f1.close()

shutil.copyfile(src, dst)

拷贝文件

#源码i
def copyfile(src, dst):
    """Copy data from src to dst"""
    if _samefile(src, dst):
        raise Error("`%s` and `%s` are the same file" % (src, dst))

    for fn in [src, dst]:
        try:
            st = os.stat(fn)
        except OSError:
            # File most likely does not exist
            pass
        else:
            # XXX What about other special files? (sockets, devices...)
            if stat.S_ISFIFO(st.st_mode):
                raise SpecialFileError("`%s` is a named pipe" % fn)

    with open(src, ‘rb‘) as fsrc:
        with open(dst, ‘wb‘) as fdst:
            copyfileobj(fsrc, fdst)

shutil.copymode(src, dst)

只拷贝权限,内容、组、用户均不变

#源码
def copymode(src, dst):
    """Copy mode bits from src to dst"""
    if hasattr(os, ‘chmod‘):
        st = os.stat(src)
        mode = stat.S_IMODE(st.st_mode)
        os.chmod(dst, mode)

示例:

#第一步,查看文件权限
# ll
总用量 16
drwxrwxr-x 2 huangxm huangxm 4096  3月 24 14:32 ./
drwxrwxr-x 6 huangxm huangxm 4096  3月 24 14:32 ../
-rw-rw-r-- 1 huangxm huangxm   49  3月 24 14:32 aaa.txt
-rw-r--r-- 1 root     root       29  3月 24 14:32 bbb.txt

#第二步,新建ccc.py,写入以下代码:
#!/usr/bin/env python3

import shutil
#将bbb.txt的文件权限复制给aaa.txt
shutil.copymode(‘bbb.txt‘, ‘aaa.txt‘)

#python3 ccc.py执行代码
#第三步:查看文件权限
# ls -l
总用量 12
-rw-r--r-- 1 huangxm huangxm 49  3月 24 14:32 aaa.txt
-rw-r--r-- 1 root     root     29  3月 24 14:32 bbb.txt
-rw-r--r-- 1 root     root     77  3月 24 14:35 ccc.py

shutil.copystat(src, dst)

拷贝状态信息,包括:mode bits, atime, mtime, flags

#源码
def copystat(src, dst):
    """Copy all stat info (mode bits, atime, mtime, flags) from src to dst"""
    st = os.stat(src)
    mode = stat.S_IMODE(st.st_mode)
    if hasattr(os, ‘utime‘):
        os.utime(dst, (st.st_atime, st.st_mtime))
    if hasattr(os, ‘chmod‘):
        os.chmod(dst, mode)
    if hasattr(os, ‘chflags‘) and hasattr(st, ‘st_flags‘):
        try:
            os.chflags(dst, st.st_flags)
        except OSError, why:
            for err in ‘EOPNOTSUPP‘, ‘ENOTSUP‘:
                if hasattr(errno, err) and why.errno == getattr(errno, err):
                    break
            else:
                raise

shutil.copy(src, dst)

拷贝文件和权限

#源码
def copy(src, dst):
    """Copy data and mode bits ("cp src dst").

    The destination may be a directory.

    """
    if os.path.isdir(dst):
        dst = os.path.join(dst, os.path.basename(src))
    copyfile(src, dst)
    copymode(src, dst)

shutil.copy2(src, dst)

拷贝文件和状态信息

#源码
def copy2(src, dst):
    """Copy data and all stat info ("cp -p src dst").

    The destination may be a directory.

    """
    if os.path.isdir(dst):
        dst = os.path.join(dst, os.path.basename(src))
    copyfile(src, dst)
    copystat(src, dst)

shutil.ignore_patterns(*patterns)

shutil.copytree(src, dst, symlinks=False, ignore=None)

src = ‘D:/temp/python/zuoye/day6‘
#当前目录的zy_d6文件夹,不需要提前创建
dst = ‘zy_d6‘
#要排除的文件,可以多个用,分隔 支持通配符比如temp*
ignore_file = shutil.ignore_patterns(‘*.py‘)
shutil.copytree(src, dst, ignore=ignore_file)

shutil.rmtree(path)

递归删除文件

shutil.move(src, dst)

递归移动文件

shutil.make_archive(base_name, format, …)

创建压缩包并返回文件路径,例如: zip、tar

base_name: 压缩包的文件名,也可以是压缩包的路径。文件名是保存到当前路径,路径时保存到指定路径

format: 压缩包种类, zip, tar, bztar, gztar

root_dir: 要压缩的文件夹路径(默认当前目录)

owner: 用户, 默认当前用户

group: 组,默认当前组

logger: 用户于记录日志,通常是logging.Logger对象

#将当前目录打包放到当前目录下
ret = shutil.make_archive(‘dq‘, ‘gztar‘)

返回值是压缩包名称,上例中ret的值是 dq.tar.gz

#将指定目录打包放到当前目录
root_dir = ‘D:/temp/python/zuoye/day6‘
ret = shutil.make_archive(‘dq‘, ‘gztar‘, root_dir=rootdir)
print(ret)

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()
z.close()
import tarfile

# 压缩
tar = tarfile.open(‘your.tar‘,‘w‘)
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()
时间: 2024-10-19 14:29:05

python(6)-shutil模块的相关文章

python之-- shutil模块

shutil 模块功能:文件/文件夹的复制,压缩处理模块shutil.copyfileobj(fsrc,fdst[,length]):将文件内容拷贝到另一个文件中,也可以是部分内容举例:文件复制 import shutil # 必须先准备好读写的文件 sfile = open('func1.py',encoding='utf-8') dfile = open('func1.py.bak','w',encoding='utf-8') # 进行内容的复制 shutil.copyfileobj(sfi

python学习shutil模块的文件压缩和解压用法

shutil模块可以创建压缩包并返回文件路径,例如 zip,tar,下面详细其用法 base_name 压缩包的文件名,也可以是压缩包的路径,只是文件名时,则保存至当前目录,否则保存指定路径 data_bak 保存当前路径 format  压缩包种类  zip tar bztar gztar root_dir 要压缩的文件路径 owner 用户 group 用户组 logger 用于记录日志 1,压缩的用法 import zipfile z=zipfile.Zipfile('a.zip','w'

python之shutil模块

一. 简介 shutil 是高级的文件,文件夹,压缩包处理模块. 二. 使用 shutil.copyfileobj(fsrc, fdst[, length])将文件内容拷贝到另一个文件中 import shutil shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w')) shutil.copyfile(src, dst)拷贝文件 shutil.copyfile('f1.log', 'f2.log') shutil.copymod

Python的shutil模块

先把东西转载下,明天继续测试 shutil.copyfile( src, dst) 从源src复制到dst中去.当然前提是目标地址是具备可写权限.抛出的异常信息为IOException. 如果当前的dst已存在的话就会被覆盖掉shutil.move( src, dst)  移动文件或重命名shutil.copymode( src, dst) 只是会复制其权限其他的东西是不会被复制的shutil.copystat( src, dst) 复制权限.最后访问时间.最后修改时间shutil.copy(

Python shutil模块用法实例分析

本文主要介绍了Python shutil模块用法,结合实例形式分析了Python使用shutil模块操作文件拷贝的相关实现技巧与注意事项,需要的朋友可以参考下: shutil模块 主要作用与拷贝文件用的. 1.shutil.copyfileobj(文件1,文件2):将文件1的数据覆盖copy给文件2. 1 import shutil 2 f1 = open("1.txt",encoding="utf-8") 3 f2 = open("2.txt"

python shutil模块总结

shutil.copyfile(src,dst)复制文件,如果存在会覆盖 copymode( src, dst)复制权限 copystat(src, dst)复制访问时间和修改时间和权限 copy(src, dst) 复制文件到一个目录 copy2(src, dst)在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西 rmtree(path[, ignore_errors[, onerror]])删除文件 move(src, dst)move文件 copyt

python学习-shutil,configparser模块

shutil模块 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作.对单个文件的操作也可参见os模块. shutil.copyfileobj(fsrc, fdst[, length]) shutil.copyfileobj(fsrc, fdst[, length]):复制文件内容(不包含元数据)从类文件对象src到类文件对dst.可选参数length指定缓冲区的大小,负数表示一次性读入.默认会把数据切分成小块拷贝,以免占用太多内存.注意:拷

python下通过os模块和shutil模块进行文件处理方式

python下通过os模块和shutil模块进行文件处理方式 得到当前工作目录路径:os.getcwd() 获取指定目录下的所有文件和目录名:os.listdir(dir) 删除文件:os.remove(file) 删除多个目录:os.removedirs(r"/home") 检测路径是否为文件:os.path.isfile(path) 检测路径是否为目录:os.path.isdir(path) 判断是否为绝对路径:os.path.isabs(path) 检测路径是否存在:os.pat

以写代学:python shutil模块

在python交互解释器中导入shutil模块,一起来简单了解一下shutil模块,shutil是shell utility的缩写,shell实用工具 可以查看帮助 shutil(help)                     //可以显示出帮助信息 import shutil shutil.copy("/bin/ls","/home")     //将ls文件拷贝到home目录下,可以/home/list复制过来为list,这样做只拷贝内容.但目标必须是一个目