Python gzip在Ubuntu 11.04上失败

时间:2012-05-08 10:38:02

标签: python gzip

以下函数基于the Python gzip module docs中的Python示例代码。它在Ubuntu 10.04上以其默认的Python 2.6.x可靠地运行。但是,在Ubuntu 11.04上,代码失败了@ writelines()

在一台11.04计算机上,报告的失败消息为'module' object has no attribute 'BufferedIOBase'。另一台11.04计算机报告了不同的消息No module named numpy。然而,numpy软件包安装在两台机器上。

有没有人知道11.04上任何遗漏的Python依赖项或其他问题会导致这种情况?

def _compress(inp,out):
    import gzip
    f_out = gzip.open(out,'wb')
    f_in = open(inp,'rb')
    f_out.writelines(f_in)
    f_out.close()
    f_in.close()
    os.unlink(inp)

1 个答案:

答案 0 :(得分:3)

错误消息No module named numpy与此问题无关;其他一些错误导致了这一点。要跟踪此情况,请打印sys.path的值以查看Python将搜索模块的路径。 Numpy可能已安装但可能不在sys.path中包含的位置。那就是回到你的主要问题。

  1. 检查Python版本。我的猜测是11.04带有2.7.x。

  2. writelines()是一种调用二进制数据的奇怪方法。更糟糕的是,参数应该是一系列字符串,而不是文件对象。请尝试使用此代码:

    f_out.write( f_in.read() )
    
  3. 根据文件大小,这会占用大量内存。请尝试循环:

    while True:
        data = f_in.read( 10240 )
        if not data: break
        f_out.write( data )