以下函数基于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)
最佳答案
错误消息No module named numpy
与此问题无关;其他一些错误导致了这种情况。要追踪这一点,请打印 sys.path 的值以查看 Python 将搜索模块的路径。 Numpy 可能已安装,但可能未安装在 sys.path 中包含的位置。言归正传,回到你的主要问题。
检查Python版本。我的猜测是 11.04 附带 2.7.x。
writelines()
是一种调用二进制数据的奇怪方法。更糟糕的是,参数应该是字符串序列,而不是文件对象。请尝试使用以下代码:f_out.write( f_in.read() )
根据文件大小,这会占用大量内存。尝试使用循环:
while True: data = f_in.read( 10240 ) if not data: break f_out.write( data )
关于Python gzip 在 Ubuntu 11.04 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10496966/