python实现在pickling的时候压缩的方法,pythonpickling


本文实例讲述了python实现在pickling的时候压缩的方法。分享给大家供大家参考。

具体方法如下:

import cPickle,gzip
def save(filename,*objects):
  fil1 = gzip.open(filename,'wb')
  for obj in objects:
    cPickle.dump(obj,fil1,protocol = 2)
    fil1.close()
def load(filename):
  fil1 = gzip.open(filename,'rb')
  while True:
    try:
      yield cPickle.load(fil1)
    except EOFError:
      break
  fil1.close()
  
  
data1 = ['abc',12,23]  #几个测试数据
data2 = {1:'aaa',"b":'dad'}
data3 = (1,2,4)
data = list([data1,data2,data3])
save('data.zip',data)

iter = load('data.zip')
for item in iter:
  for data in item:
    print data

本文实例测试环境为Python2.7.6

程序运行结果如下:

['abc', 12, 23]
{1: 'aaa', 'b': 'dad'}
(1, 2, 4)

在程序运行的同时会在同级目录下生成data.zip文件。

希望本文所述对大家Python程序设计的学习有所帮助。


需要用python将16位的16进制数据压缩,问有什好的压缩方法?

用py内置的zip/inflate/deflate就很好
 

有关python 压缩备份的问题

问题:我没有在Python2.7下测试你的代码,只是在Python3.2下测试的,因为我没装2.7版本的。不过,没关系,其字符串用法及其意义是一样的。我测试了一下,应该是其中的一句出错了:target_dir=r'D:\bak\\' 。这句话在语法上没有问题,也是要这么写,但是target_dir的值就有可能不是我们所想的了,你可以使用print输出一下target_dir的值,我在3.2下输入的结果是:D:\bak\\。这一看就不对,多了一个反斜杠(\),导致在Windows下路径出错。

解决:把target_dir=r'D:\bak\\'后面再加上一句:target_dir=target_dir[0:-1]。这样一来,就把最后的反斜杠给清除了,路径就对了!应该没问题了,我直接看的代码,发现这句有问题,就对这句单独测试的,其它的代码没有测试,不过,看语法应该没问题了!

另外:你使用的后缀名是.rar,压缩命令是rar程序,所以备份的文件名应该是rar文件;在Windows下,我没用过rar命令行压缩命令,也不太清楚,推测应该是rar文件。至于你问的文件夹可以不可以备份和文件夹下的目录可以不可以备份,这不是 Python所管的事(至少在你这段代码中),至于能不能,要看你这个Windows下的rar程序支持不支持了;如果支持,就可以,如果不支持,就不可以。原因:os.system()函数类似于C/C++中的system(),它会把传递给它的参数交给系统环境(也就是运行Python程序操作系统)来执行,这和我们在相应的系统环境中的命令行下直接命令是一样的,区别就是我们这个使用的是脚本,可以保存代码以自动(例行性服务)或手动地、定期地备份!
 

评论关闭