xylz,imxylz

关注后端架构、中间件、分布式和并发编程

   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  111 随笔 :: 10 文章 :: 2680 评论 :: 0 Trackbacks
9-20.

Compressed Files. Write a short piece of code that will compress and decompress gzipped or bzipped files. Confirm your solution works by using the command-line gzip or bzip2 programs or a GUI program like PowerArchiver, StuffIt, and/or WinZip.

 1#!/usr/bin/env python
 2#-*- coding:utf-8 -*-
 3#$Id: p0920.py 166 2010-06-29 03:46:56Z xylz $
 4
 5'''
 6This is a 'python' study plan for xylz.
 7Copyright (C)2010 xylz (www.imxylz.info)
 8'''
 9
10import gzip
11import os
12
13def compress (dst,f):
14    print "compress %s to %s" % (f,dst)
15    f_out = gzip.open(dst,'wb')
16    f_in = open(f,'rb')
17    f_out.writelines(f_in)
18    f_in.close()
19    f_out.close()
20    in_size = os.path.getsize(f)
21    out_size = os.path.getsize(dst)
22    print "source size %d bytes, target size %d bytes, %d%%" % (in_size,out_size,(out_size*100/in_size))
23        
24def decompress (f,dst):
25    print "decompress %s to %s" % (f,dst)
26    f_in = gzip.open(f,'rb')
27    f_out = open(dst,'wb')
28    f_out.writelines(f_in)
29    f_in.close()
30    f_out.close()
31    in_size = os.path.getsize(f)
32    out_size = os.path.getsize(dst)
33    print "source size %d bytes, target size %d bytes, %d%%" % (in_size,out_size,(in_size*100/out_size))
34    
35
36if __name__ == '__main__':
37    import sys
38    if len(sys.argv)<3 or ('c'!= sys.argv[1and 'x'!= sys.argv[1]):
39        print "Usage: %s <c|x> <file> [destfile]" % (sys.argv[0],)
40        sys.exit(0)
41    src_file = sys.argv[2]
42    dest_file = None
43    if len(sys.argv)>3:
44        dest_file = sys.argv[3]
45    
46
47    if 'c' == sys.argv[1]:
48        if not dest_file:
49            dest_file = src_file+".gz"
50        compress(dest_file,src_file)
51    
52    else:
53        if not dest_file:
54            dest_file = src_file[:src_file.index('.gz')] #raise exception if file error
55        decompress(src_file,dest_file)
56        
57        
58    
59
下面是一次执行的输出结果:
C:\Users\xylz\Desktop\core_python>python p0920.py
Usage: p0920.py <c|x> <file> 
[destfile]

C:\Users\xylz\Desktop\core_python>python p0920.py c p0920.py
compress p0920.py to p0920.py.gz
source size 
1587 bytes, target size 614 bytes, 38%

C:\Users\xylz\Desktop\core_python>python p0920.py x p0920.py.gz p0920.py
.2
decompress p0920.py.gz to p0920.py
.2
source size 
614 bytes, target size 1587 bytes, 38%

C:\Users\xylz\Desktop\core_python>md5sum p0920.py p0920.py
.2
3383e1a05fbede400dd016feed8a55bf *p0920.py
3383e1a05fbede400dd016feed8a55bf *p0920.py
.2


©2009-2014 IMXYLZ |求贤若渴
posted on 2010-06-29 11:51 imxylz 阅读(16693) 评论(0)  编辑  收藏 所属分类: Python

只有注册用户登录后才能发表评论。


网站导航:
 

©2009-2014 IMXYLZ