• tarfile/zipfile/shutil


    当我们选择使用Python来进行Linux系统管理,那么就免不了会在Python代码中对压缩包进行处理,包括创建压缩包、解压、获取压缩包中的文件列表等

    tarfile

    Python的tarfile标准库提供了tar命令提供的功能,我们可以使用它创建一个压缩或非压缩的tar包

    tarfile最常用的函数:

      getnames: 获取tar包中的文件列表

         extract: 提取单个文件

      extractall: 提取所有文件

    1、读取tar包

     这个例子中,我们首先导入tarfile库,然后使用默认的读模式打开tar包。tarfile.open函数会返回一TarFile的对象,用这个对象表示当前打开的tar包,我们可以通过这个对象的方法操作和读取tar包的内容。如下:通过TarFile对象的getmembers 方法获取了tar包中的文件列表

    import tarfile
    with tarfile.open('heboan.tar') as t:
        for member_info in t.getmembers():
            print(member_info.name)

     2、创建tar包

     创建一个tar包,所以以写模式打开tar包并得到一个TarfFile对象,然后使用TarFile对象的方法将README.txt文件添加到tar包中。

    import tarfile
    with tarfile.open('heboan.tar', 'w') as out:
        out.add('README.txt')

     3、使用tarfile库读取与创建压缩包

    前面我们创建和读取的是一个没有经过压缩的tar包。一般情况下,我们创建一个tar包的时候都会使用压缩算法进行压缩,以减少数据传输的带宽和磁盘的存储空间。

    #读取一个用gzip算法压缩的tar包
    with tarfile.open('tardile_add.tar', mode='r:gz') as out:
    
    #创建一个用bzip2算法压缩的tar包
    with tarfile.open('tarfile_add.tar', mode='w:bz2') as out:
                                                         

    zipfile

    大部分情况下,我们在Linux下使用gzip或gzip2进行压缩,在Windows下使用zip进行压缩

    1、读取zip文件

    ZipFile的常用方法:

      namelist: 返回zip文件中包含的所有文件和文件夹的字符串列表

      extract:从zip文件中提取单个文件

      extractall: 从zip文件中提取所有文件

    import zipfile
    
    example_zip = zipfile.ZipFile('heboan.zip')
    print(example_zip.namelist())

    2、创建zipfile

    import zipfile
    
    newzip = zipfile.ZipFile('new.zip', 'w')
    newzip.write('spam.txt')
    newzip.close()
    import zipfile
    
    f = zipfile.ZipFile('temp.zip')
    #把所有有可能的密码保存到一个密码文件中,然后读取这个文件中的密码进程尝试破解
    with open('passwords.txt') as pf:
        for line in pf:
            try:
                f.extractall(pwd=line.strip())
                print('password is {}'.format(line.strip()))
            except:
                pass
    暴力破解zip压缩包的密码

    shutil

    shutil模块是高层次的文件接口,除了包含文件和目录的操作函数以外,还包含了压缩创建和压缩。

    shutil支持的格式可以通过get_archive_formats函数获取,如下

    In [1]: import shutil
    
    In [2]: shutil.get_archive_formats()
    Out[2]: 
    [('bztar', "bzip2'ed tar-file"),
     ('gztar', "gzip'ed tar-file"),
     ('tar', 'uncompressed tar file'),
     ('zip', 'ZIP file')]

    1、shutil创建压缩包

    import shutil
    
    shutil.make_archive('/root/tmp/tools', 'gztar', '/root/tools')
    
    #第一个参数是压缩的文件名
    #第二个参数是压缩的格式
    #第三个参数是压缩的目录
    
    最后压缩的文件是: /root/tmp/tools.tar.gz

    2、在python3中shutil解压压缩包

     在python2中,shutil模块仅包含了创建压缩包的函数,并没有解压的函数。在python3找那个,shutil模块包含了一个与make_archive一样好用的解压函数,即unpack_archive

    import shutil
    
    shutil.unpack.archive('tools.tar.gz')
  • 相关阅读:
    导出Execl
    字符串与整型的转换及判断
    sql 删除重复记录
    日期函数
    C#中Hashtable和HashMap的区别很详细;
    c# Cookie汉字乱码的问题
    C#遍历整个文件夹及子目录的文件代码,.Net技术文章,Asp.net系列教程,Asp.n...
    自定义服务器控件开发之2:文件上传控件
    09所对应的汉字
    ms sql 分割字符串
  • 原文地址:https://www.cnblogs.com/sellsa/p/9939599.html
Copyright © 2020-2023  润新知