2

下面的函数基于Python gzip 模块文档中的 Python 示例代码。它在带有默认 Python 2.6.x 的 Ubuntu 10.04 上可靠地运行。但是,在 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)
4

1 回答 1

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 )
    
于 2012-05-08T10:46:38.093 回答