数学之路-python计算实战(4)-Lempel-Ziv压缩(2)

Format characters have the following meaning; the conversion between C and Python values should be obvious given their types. The ‘Standard size’ column refers to the size of the packed value in bytes when using standard size; that is, when the format string starts with one of ‘<‘‘>‘‘!‘ or ‘=‘. When using native size, the size of the packed value is platform-dependent.

本博客所有内容是原创,如果转载请注明来源

http://blog.csdn.net/myhaspl/


Format C Type Python type Standard size Notes
x pad byte no value    
c char string of length 1 1  
b signed char integer 1 (3)
B unsigned char integer 1 (3)
? _Bool bool 1 (1)
h short integer 2 (3)
H unsigned short integer 2 (3)
i int integer 4 (3)
I unsigned int integer 4 (3)
l long integer 4 (3)
L unsigned long integer 4 (3)
q long long integer 8 (2), (3)
Q unsigned long long integer 8 (2), (3)
f float float 4 (4)
d double float 8 (4)
s char[] string    
p char[] string    
P void * integer   (5), (3)
struct.pack(fmtv1v2...)

Return a string containing the values v1, v2, ... packed according to the given format. The arguments must match the values required by the format exactly.

truct.unpack(fmtstring)

Unpack the string (presumably packed by pack(fmt, ...)) according to the given format. The result is a tuple even if it contains exactly one item. The string must contain exactly the amount of data required by the format (len(string) must equal calcsize(fmt)).

读文本文件并压缩以及解 压 ,部分代码如下:

  

# -*- coding: utf-8 -*- 
#lempel-ziv算法
#code:myhaspl@myhaspl.com
import struct
mystr=""
print "\n读取源文件".decode("utf8")
mytextfile= open(‘test2.txt‘,‘r‘)
try:
     mystr=mytextfile.read( )
finally:
     mytextfile.close()
my_str=mystr
#码表
codeword_dictionary={}
#待压缩文本长度
str_len=len(my_str)
#码字最大长度
dict_maxlen=1
#将解析文本段的位置(下一次解析文本的起点)
now_index=0
#码表的最大索引
max_index=0

#压缩后数据
print "\n生成压缩数据中".decode("utf8") 
compresseddata=[]
while (now_index<str_len):    
    #向后移动步长
    mystep=0
    #当前匹配长度
    now_len=dict_maxlen
    if now_len>str_len-now_index:
        now_len=str_len-now_index
    #查找到的码表索引,0表示没有找到
    cw_addr=0   
    while (now_len>0):
        cw_index=codeword_dictionary.get(my_str[now_index:now_index+now_len])
        if cw_index!=None:
    		#找到码字
            cw_addr=cw_index
            mystep=now_len  
            break
        now_len-=1    
    if cw_addr==0:
        #没有找到码字,增加新的码字
        max_index+=1
        mystep=1
        codeword_dictionary[my_str[now_index:now_index+mystep]]=max_index
        print "don‘t find the Code word,add Code word:%s index:%d"%(my_str[now_index:now_index+mystep],max_index)
    else:
        #找到码字,增加新的码字
        max_index+=1    
        if now_index+mystep+1<=str_len:
            codeword_dictionary[my_str[now_index:now_index+mystep+1]]=max_index
            if mystep+1>dict_maxlen:
                dict_maxlen=mystep+1      
        print "find the Code word:%s  add Code word:%s index:%d"%(my_str[now_index:now_index+now_len],my_str[now_index:now_index+mystep+1],max_index)  
.......
......
        my_codeword_dictionary[my_maxindex]=my_codeword_dictionary[cwkey]+cwlaster        
        uncompressdata.append(my_codeword_dictionary[cwkey])
        uncompressdata.append(cwlaster)     
    print ".",
uncompress_str=uncompress_str.join(uncompressdata)
uncompressstr=uncompress_str
print "\n将解压结果写入文件中..\n".decode("utf8")
uncompress_file= open(‘uncompress.txt‘,‘w‘)
try:
    uncompress_file.write(uncompressstr)
    print "\n解压成功,已解压到uncompress.txt!\n".decode("utf8")
finally:
    uncompress_file.close()
对于52kb的2014*工作报告,内容如下:

*:
  各位代表:现在,我代表国务院,向大会作*工作报告,请予审议,并请全国政协各位委员提出意见。
  一、2013年工作回顾
  过去一年是本届*依法履职的第一年,任务艰巨而繁重。面对世界经济复苏艰难、国内经济下行压力加大、自然灾害频发、多重矛盾交织的复杂形势,全国各族人民在以*同志为总书记的党*领导下,从容应对挑战,奋力攻坚克难,圆满实现全年经济社会发展主要预期目标,改革开放和*现代化建设取得令人瞩目的重大成就。


168
[热点]洋媳妇过年の真心话 |  韩相亲节目女嘉宾上吊
  ——经济运行稳中向好。国内生产总值达到56.9万亿元,比上年增长7.7%。居民消费价格涨幅控制在2.6%。城镇登记失业率4.1%。城镇新增就业1310万人,创历史新高。进出口总额突破4万亿美元,再上新台阶。
  ——居民收入和经济效益持续提高。城镇居民人均可支配收入实际增长7%,农村居民人均纯收入实际增长9.3%,农村贫困人口减少165O万人,城乡居民收入差距继续缩小。规模以上工业企业利润增长12.2%。财政收入增长1O.1%。
  ——结构调整取得积极成效。粮食产量超过1.2万亿斤,实现“十连增”。服务业增加值比重达到46.1%,首次超过第二产业。中西部地区生产总值比重继续提高,区域发展协调性增强。全社会用电量增长7.5%,货运量增长9.9%,主要实物量指标与经济增长相互匹配。
  ——社会事业蓬勃发展。教育、科技、文化、卫生等领域取得新进步。神舟十号遨游太空,嫦娥三号成功登月,蛟龙深潜再创纪录,这表明中国人民完全有能力、有智慧实现建成创新型国家的目标。
  过去一年,困难比预料的多,结果比预想的好。经济社会发展既有量的扩大,又有质的提升,为今后奠定了基础。这将鼓舞我们砥砺前行,不断创造新的辉煌。
  一年来,我们坚持稳中求进工作总基调,统筹稳增长、调结构、促改革,坚持宏观政策要稳、微观政策要活、社会政策要托底,创新宏观调控思路和方式,采取一系列既利当前、更惠长远的举措,稳中有为,稳中提质,稳中有进,各项工作实现了良好开局。
  一是着力深化改革开放,激发市场活力和内生动力。

....................

....................

进行压缩,生成特定格式的二进制文件为39kb

有一定的压缩效果,解压缩后正常

 


数学之路-python计算实战(4)-Lempel-Ziv压缩(2),布布扣,bubuko.com

数学之路-python计算实战(4)-Lempel-Ziv压缩(2)

上一篇:(原)python爬虫入门(2)---排序爬取的辽宁科技大学热点新闻


下一篇:[学习笔记] Python标准库简明教程 [转]