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

2024-05-03 23:56:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用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行。在

我试过执行死刑应用程序销售.py在我的C#解决方案中,直接来自IronPython并使用python2.7(昨晚安装了ActivePython);结果都是一样的:当我尝试使用7zip打开.gz文件时,我得到了以下错误:

CRC Failed ... file is broken

使用ipstream获取gzi时尝试:

The CRC in GZip footer does not match the CRC calculated from the decompressed data

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

我能流利地使用C,但对Python还是新手。如果您能提供任何帮助,我们将不胜感激。在

谢谢你的时间。在


Tags: 文件thepy应用程序net解决方案crcmodule
1条回答
网友
1楼 · 发布于 2024-05-03 23:56:10

看来问题出在444号线。以下是444-446行:

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

在这个阶段,如果您已经删除了第429-435行或选择不解压缩,那么filebuffer将引用您从web上获得的原始gzip流。输出文件是以文本模式打开的,并且您是在Windows上,因此二进制gzip流中的每个\n都将被转换为\r\n损坏,如错误消息所示。在

所以:为了使模块在Windows和其他平台上都能移植使用,开放模式必须是“wb”(b代表二进制)。如果gunzipped结果文件也是二进制文件,则可以在open调用中硬编码“wb”。但是,如果gunzipped文件是一个文本文件(意味着可以在文本编辑器中打开),那么您只需要“w”就可以了,您应该根据需要将变量mode设置为“wb”或“w”,并在open调用中使用mode。在

大问题:我理解为什么您删除了使用IronPython的gzip引用。你删除了Python2.7的那些行了吗?或者在Python2.7下运行它时,这些行仍然在,但是已经设置好了选项.unzipFile是假的?在

相关问题 更多 >