zoukankan      html  css  js  c++  java
  • shutil模块

    对文件进行copy、还可以压缩包

    文件copy

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

    将文件内容拷贝到另一个文件中,需要打开文件,fsrc,fdst是2个文件的文件句柄

    1 import shutil
    2 with open("old_file",encoding = "utf-8") as f1,
    3     open("new_file","w",encoding = "utf-8") as f2:
    4     shutil.copyfileobj(f1,f2)

    2)shutil.copyfile(src, dst)

    从一个文件拷贝到另一个文件,不需要打开文件这样的操作,src,dst 是2个文件的文件名

    1 shutil.copyfile("old_file","new_file3")

    3)shutil.copymode(src, dst)  ??

    仅拷贝权限。内容、组、用户均不变  

    [root@whtest137 ~]# ll
    total 8
    -rwxr-xr-x 1 root   root   0 Apr  1 16:05 zhangqigao   #有执行权限
    -rw-r--r-- 1 whtest whtest 0 Apr  1 16:06 zhangqigao_old  #没有执行权限
    >>> import os,shutil
    >>> os.chdir("/root")
    #拷贝"zhangqigao_old"权限给"zhangqigao"
    >>> shutil.copymode("zhangqigao_old","zhangqigao") 
    [root@whtest137 ~]# ll
    total 8
    -rw-r--r-- 1 root   root   0 Apr  1 16:05 zhangqigao  # 获得跟"zhangqigao_old"一样的文件权限
    -rw-r--r-- 1 whtest whtest 0 Apr  1 16:06 zhangqigao_old

    4)shutil.copystat(src, dst) ??

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

    5)shutil.copy(src, dst)

    拷贝文件和权限

     1 #拷贝前
     2 [root@jenkins_sh temp]# ll
     3 total 0
     4 -rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old
     5 #拷贝中
     6 >>> import os,shutil
     7 >>> os.chdir("/temp")
     8 >>> shutil.copy("zhangqigao_old","zhangqigao")
     9 #拷贝结果输出
    10 [root@jenkins_sh temp]# ll
    11 total 0
    12 -rwxr-xr-x 1 root    root    0 Apr  1 17:42 zhangqigao  #拷贝了zhangqigao_old文件和文件权限
    13 -rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old

    6)shutil.copy2(src, dst)

    功能:拷贝文件和文件的状态

     1 #拷贝前
     2 [root@jenkins_sh temp]# ll
     3 total 0
     4 -rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old
     5 #拷贝中
     6 >>> import os,shutil
     7 >>> os.chdir("/temp")
     8 >>> shutil.copy2("zhangqigao_old","zhangqigao")
     9 #拷贝后
    10 [root@jenkins_sh temp]# ll
    11 total 0
    12 -rwxr-xr-x 1 root    root    0 Apr  1 16:26 zhangqigao  #拷贝了zhangqigao_old的文件和状态
    13 -rwxr-xr-x 1 jenkins jenkins 0 Apr  1 16:26 zhangqigao_old

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

    递归的去拷贝文件,将文件1递归拷贝到文件2

    1 shutil.copytree("a","b")

    8)shutil.rmtree(path[, ignore_errors[, onerror]])

    递归删除文件目录,会删除空文件 

    1 shutil.rmtree("b")

     文件打包

    1)shutil.make_archive(base_name, format,...)

    • 创建压缩包并返回文件路径,例如:zip、tar
    • base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
    • 如:www                        =>保存至当前路径
    • 如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
    • format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
    • root_dir: 要压缩的文件夹路径(默认当前目录)
    • owner: 用户,默认当前用户
    • group: 组,默认当前组
    • logger: 用于记录日志,通常是logging.Logger对象
    1 shutil.make_archive("wwwwww","gztar","E:python_3.5secondjson模块")

    2)zipfile 

    shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的

    功能:以zip的形式压缩文件,注意了这个只能压缩文件,不能压缩目录,如果压缩,也只能显示空目录。

    压缩

    import zipfile
    z = zipfile.ZipFile("json模块.zip","w")
    z.write("new_file")
    z.write("shutil模块.py")
    
    z.close()

    解压

    1 z = zipfile.ZipFile('json模块.zip', 'r')
    2 z.extractall()
    3 z.close()

    3、tarfile

     1 import tarfile
     2 
     3 # 压缩
     4 tar = tarfile.open('your.tar','w')
     5 tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
     6 tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
     7 tar.close()
     8 
     9 # 解压
    10 tar = tarfile.open('your.tar','r')
    11 tar.extractall()  # 可设置解压地址
    12 tar.close()
    13 
    14 tarfile 压缩解压
  • 相关阅读:
    BZOJ3105:[CQOI2013]新Nim游戏(线性基,贪心)
    BZOJ5102:[POI2018]Prawnicy(贪心,堆)
    BZOJ3533:[SDOI2014]向量集(线段树,三分,凸包)
    BZOJ3569:DZY Loves Chinese II(线性基)
    BZOJ3534:[SDOI2014]重建(矩阵树定理)
    【BZOJ 1202】 [HNOI2005]狡猾的商人
    【BZOJ 1003】 [ZJOI2006]物流运输trans
    【BZOJ 2321】 [BeiJing2011集训]星器
    【BZOJ 1010】 [HNOI2008]玩具装箱toy
    【BZOJ 2730】 [HNOI2012]矿场搭建
  • 原文地址:https://www.cnblogs.com/wengxq/p/7003599.html
Copyright © 2011-2022 走看看