我正在尝试使用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。我们非常感谢您提供的任何帮助。
感谢您的时间。
答案 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?