以下函数基于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)
答案 0 :(得分:3)
错误消息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 )