Welcome to the K-free blog;|

k-free

园龄:5年8个月粉丝:5关注:7

Python ---- tarfile && zipfile 压缩及打包

感觉使用Python压缩是不是更方便点儿啊,现在都魔怔了,就用"ipython"替代命令行了都(哈哈哈哈)

1. tarfile

tarfile不得不说真的很好用,感觉比Linux上的tar命令好用(不过我还是很热爱Linux的,嘻嘻.)
Python的tarfile标准库提供了tar命令提供的功能,我们可以使用它来创建或读取一个tar文件;

  1. 创建tar包
In [1] import tarfile, os
In [2] with tarfile.open('new.tar','w') as f:
    ...:     for file in os.listdir('.'):
    ...:         f.add(file)
  1. 读取tar包(查看tar包中文件)
In [3]: with tarfile.open('test.tar') as out: 
   ...:     for name in out.getnames(): 
   ...:         print(name)
  1. 读取tar包(打开tar包)
In [4]: with tarfile.open('test.tar') as out: 
   ...:     out.extractall()

2. 创建压缩包(gzip)

tarfile不支持创建zip格式的压缩包,所以有了zipfile这个模块,这个都看习惯吧,其实我比较习惯用gzip;

  1. 创建一个用gzip算法压缩的tar包
In [4]: with tarfile.open('dir1.tar.gz','w:gz') as f: 
   ...:     f.add('dir1')
   # 图中为dir1的目录结构,自动将子目录及子目录下的所有文件都打进了gzip包中(这个非常好)

image

  1. 读取一个用gzip算法压缩的tar包
# 获取压缩包中的文件名及绝对路径
In [5]: with tarfile.open('dir1.tar.gz','r:gz') as out: 
   ...:     for name in out.getnames(): 
   ...:         print(name) 

image

# 解压gzip压缩包
In [6]: with tarfile.open('dir1.tar.gz','r:gz') as out: 
   ...:     out.extractall()

3. zipfile

当我们要将文件或目录压缩为zip格式的时候或我们要讲zip格式的文件解压的时候需要用到zipfile模块

  1. 创建zip文件
In [7]: import zipfile
   ...:  newzip = zipfile.ZipFile('new.zip','w')
   ...:  newzip.write('a.txt')
   ...:  newzip.close()
  1. 读取zip文件(展示zip文件中的文件列表)
In [7]: newzip = zipfile.ZipFile('new.zip')
   ...:   newzip.namelist()
  1. 读取zip文件(解压)
In [7]: newzip = zipfile.ZipFile('new.zip')
   ...:   newzip.extractall()

案例

1. 压缩/root目录下的所有文件(包括子目录及子目录下的文件)

zipfile有一种情况就是如果被压缩的目标是一个目录,且这个目录下还有子目录,同时也要压缩子目录的文件的情况下就需要与循环一起用,默认不会主动压缩;

#!/usr/bin/python3
import os, zipfile, sys

def zip_file(zipname, dirs=[]):
    newzip = zipfile.ZipFile(zipname,'w')
    if os.path.isdir(dirs):
       for root,dirs,files in os.walk(dirs):
           for file in files:
               newzip.write(os.path.join(root,file))
       print('compressing!')
       newzip.close()
    else:
       print("{0} is not directory.".format(dirs))
       sys.exit(2)

def main():
    sys.argv.append("")
    zipname = sys.argv[1]
    dirs = sys.argv[2]
    print(zipname)
    zip_file(zipname,dirs)

if __name__ == "__main__":
   main()

image

本文作者:k-free

本文链接:https://www.cnblogs.com/k-free-bolg/p/12887635.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   k-free  阅读(730)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 新時代 (ウタ from ONE PIECE FILM RED) Ado
新時代 (ウタ from ONE PIECE FILM RED) - Ado
00:00 / 00:00
An audio error has occurred.

作词 : 中田ヤスタカ

作曲 : 中田ヤスタカ

新時代はこの未来だ

世界中全部 変えてしまえば

変えてしまえば

ジャマモノ やなもの なんて消して

ジャマモノ やなもの なんて消して

この世とメタモルフォーゼしようぜ

ミュージック

キミが起こす マジック

目を閉じれば未来が開いて

目を閉じれば未来が開いて

いつまでも終わりが来ないようにって

この歌を歌うよ

Do you wanna play? リアルゲーム ギリギリ

Do you wanna play? リアルゲーム ギリギリ

綱渡りみたいな旋律

認めない戻れない忘れたい

夢の中に居させて I wanna be free

見えるよ新時代が 世界の向こうへ

さあ行くよ NewWorld

新時代はこの未来だ

新時代はこの未来だ

世界中全部 変えてしまえば

変えてしまえば

果てしない音楽がもっと届くように

夢は見ないわ キミが話した

「ボクを信じて」

あれこれいらないものは消して

あれこれいらないものは消して

リアルをカラフルに越えようぜ

ミュージック

今始まる ライジング

目をつぶりみんなで逃げようよ

目をつぶりみんなで逃げようよ

今よりイイモノを見せてあげるよ

この歌を歌えば

Do you wanna play? リアルゲーム ギリギリ

Do you wanna play? リアルゲーム ギリギリ

綱渡りみたいな運命

認めない戻れない忘れたい

夢の中に居させて I wanna be free

見えるよ新時代が 世界の向こうへ

さあ行くよ NewWorld

新時代わ この未来を

新時代わ この未来を

世界中全部 変えてしまえば 変えてしまえば

果てしない音楽がもっと届くように

夢を見せるよ 夢を見せるよ

新時代だ

新時代だ

新時代だ