2012-05-08 77 views
2

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

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

有谁知道任何缺失的Python依赖关系或其他问题在11.04会导致这种情况?

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) 
+0

可能重复[如何导入的igraph时解决AttributeError的?](http://stackoverflow.com/questions/6315440/how-to-solve-attributeerror-when- imported-igraph) – krock

+1

'numpy'与'gzip'有什么关系?你可能在错误的地方寻找你的错误。 – vartec

+0

你有没有'io.py'文件,或者'io/__ init __。py'可能会被导入? –

回答

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) 
    
+0

是的,11.04运行Python 2.7x。感谢您建议循环。这些文本文件相当庞大。我会尝试你的选择。 Tom – tahoar

+0

这样解决了问题,就像删除了sys.path中不需要的io.py一样。两者都运行良好。谢谢。 – tahoar