AppDailySales:Works,但下载的gzip文件已损坏

时间:2011-01-18 14:31:28

标签: python ironpython

我正在尝试使用appdailysales.py module每天下载我们的iPhone应用程序。我是.NET开发人员,所以我尝试使用以下代码在C#解决方案中使用IronPython运行它:

using IronPython.Hosting;

var ipy = Python.CreateRuntime();
dynamic appSales = ipy.UseFile("appdailysales.py");            
appSales.main();

因为我没有gzip,所以我取出了对该模块的引用。我打算使用GZipStream C#类来解压缩文件(Apple,将其下载提供为.gz文件)。所以,我评论了第75和429-435行。

我已经尝试在我的C#解决方案中直接从IronPython执行appdailysales.py并使用Python 2.7(昨晚安装了ActivePython);所有结果相同:当我尝试使用7zip打开.gz文件时,出现以下错误:

  

CRC失败...文件已损坏

当我尝试使用GZipStream类时,我得到:

  

GZip页脚中的CRC与从解压缩数据计算的CRC不匹配

如果我手动下载.gz文件,我可以使用7Zip或GZipStream解压缩文件。

我精通C#,但不熟悉Python。我们非常感谢您提供的任何帮助。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

看起来444行就是问题所在。这是第444-446行:

downloadFile = open(filename, 'w')
downloadFile.write(filebuffer)
downloadFile.close()

在此阶段,如果您删除了第429-435行或选择了不解压缩,则filebuffer指的是您从网络获取的原始gzip流。输出文件以TEXT模式打开,并且您在Windows上,因此BINARY gzip压缩流中的每个\n都将转换为\r\n - CORRUPTION,就像错误消息所说的那样。

因此:对于在Windows和其他平台上可移植使用的模块,开放模式必须是“wb”(b表示二进制)。如果gunzipped结果文件也是二进制文件,则可以在打开的调用中对“wb”进行硬编码。但是,如果gunzipped文件是一个文本文件(意味着能够在文本编辑器中打开),那么你只需要“w”就可以了,你应该将变量mode设置为“wb”或者在适当的情况下使用“w”,并在公开呼叫中使用mode

大问题:我理解您为何删除了使用IronPython的gzip引用。你删除了Python 2.7的那些行吗?或者你是否在Python 2.7下运行它,但这些行仍在,但是将options.unzipFile设置为False?