2012-05-08 74 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