完全编辑:
我迫切需要使用Python访问microsoftsqlserver并从中读取压缩数据。在经历了很多麻烦之后,我终于找到了一个可以工作的Matlab实现,它可以完成这个任务。不过,我需要用Python编写。在
数据以图像数据类型存储,下载后必须解压缩。 这是使用Matlab代码(使用java例程)来完成以下工作:
connection = actxserver('ADODB.Connection');
conString = 'Provider=SQLOLEDB; Data Source=adress.to.server; Integrated Security=SSPI; Initial Catalog=';
connection.ConnectionString = conString;
connection.CursorLocation = 'adUseClient';
connection.Open();
query_string = 'select Zip from Database where DatabaseName=''foo'' and Item=''bar'' ';
return = connection.Execute(query_string);
row = return.GetRows();
data = row{1};
class(data) % returns uint8
a = java.io.ByteArrayInputStream(data);
b = java.util.zip.InflaterInputStream(a);
isc = com.mathworks.mlwidgets.io.InterruptibleStreamCopier.getInterruptibleStreamCopier();
c = java.io.ByteArrayOutputStream;
isc.copyStream(b,c);
result = typecast(c.toByteArray,'uint16');
result
现在包含一个整数数组,这些整数是未压缩的所需数据。我希望使用Python实现同样的功能。以下是我用来检索数据的代码:
现在我该怎么充气?我试过了
zlib.decompress(io.BytesIO(data).read())
它返回一个正确长度的bytearray,但是我需要上面Matlab代码返回的整数数组。我试图解码压缩的和膨胀的bytearray,但没有成功。在
Matlab和pyodbc如何处理SQL中的图像数据类型有区别吗?如何在Python中检索整数数组?在
我在WindowsXP上使用Python2.7.2、pyodbc 3.0.5和MatlabR2011B。在
听起来你想把东西解压成16位无符号整数?在
所以,你有这样的东西:
你想要:
^{pr2}$如果是这样,你有几个选择。在
如果你要使用numpy,考虑使用numpy。在
或者,您可以使用python的内置
array
执行类似的操作:您也可以使用
struct
模块,但对于这样的重复数据,它并不理想。在问题是在使用pyodbc时使用MS-SQL时,blob被截断为4096个字节。 解决方案是预先添加查询
SET TEXTSIZE 2147483647
(2GB,理论上最大值是4GB,但这可能会导致32位有符号值的一些问题)。在所以你的代码应该是:
{a1}另见}
相关问题 更多 >
编程相关推荐