【问题标题】:Python gzip fails on Ubuntu 11.04Python gzip 在 Ubuntu 11.04 上失败
【发布时间】:2012-05-08 18:46:38
【问题描述】:

以下函数基于the Python gzip module docs 中的 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)

【问题讨论】:

  • numpygzip 有什么关系?您可能在错误的地方寻找错误。
  • 你有一个io.py 文件,或者一个io/__init__.py 周围可能会被导入吗?
  • 我看到了 igraph 的讨论。不一样,因为这段代码在 writelines() 上抛出错误,而不是在“import”上。此外,sys.path 中没有其他 io.py (et.al.)。我使用大量数据文件将更新发送给用户,我正在等待他报告下面的代码是否解决了问题。
  • 我的立场是正确的。在 sys.path 中有一个名为 io.py 的竞争文件。重命名该文件解决了这个问题。但是,将 io.py 留在那里并运行代码更改以消除 writelines() 也可以解决问题。有趣的是,这个问题不会出现在 10.04 或 10.10(都是 Python 2.6x)上。删除 io.py 或避免 writelines() 或两者都可以解决问题。谢谢大家。

标签: python gzip


【解决方案1】:

报错信息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 )
    

【讨论】:

  • 是的,11.04 正在运行 Python 2.7x。感谢您建议循环。这些文本文件非常庞大。我会试试你的替代方案。汤姆
  • 这解决了这个问题,就像删除 sys.path 中不必要的 io.py 一样。两者都做也很好。谢谢。
猜你喜欢
  • 1970-01-01
  • 2011-08-25
  • 2011-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
相关资源
最近更新 更多