2011-01-18 18 views
0

私は毎日iPhoneアプリをダウンロードするためにappdailysales.py moduleを使用しようとしています。私は、.NET開発者ですので、私は次のコードを使用してC#ソリューションでIronPythonのを使用して、これを実行してみました:私はGZIPを持っていなかったのでAppDailySales:動作しますが、ダウンロードしたgzipファイルが破損しています

using IronPython.Hosting; 

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

を、私はそのモジュールへの参照を取り出しました。私はGZipStream C#クラスを使用してファイルを解凍しようとしていました(Appleが.gzファイルとしてダウンロードを提供しています)。だから私は75行目と429〜435行目をコメントアウトした。

IronPythonから直接Python 2.7(昨夜のActivePythonインストール済み)を使用してC#ソリューションでappdailysales.pyを実行しようとしました。同じ結果をすべて:私は7zipをを使用して.gzのファイルを開こうとすると、私は次のエラーを取得する:私はGZipStreamクラスを使用しようとすると

CRC Failed ... file is broken

私が手:

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

もし私が手動で.gzファイルをダウンロードすると、7ZipまたはGZipStreamを使ってファイルを解凍できます。

私はC#に慣れていますが、Pythonでは初めてです。あなたが提供できるどんな助けも大歓迎です。

お時間をいただきありがとうございます。

答えて

1

ライン444のように見えますが問題です。ここではライン444-446です:あなたが解凍しないようにライン429-435を削除または選択した場合

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

この段階では、その後、filebufferは、Webから得た生のgzip圧縮されたストリームを参照します。出力ファイルはTEXTモードで開き、Windows上にあるので、BINARY gzippedストリームの\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に設定しましたか?

+0

@ Tod1d:あなたの質問に答えた場合は、それを受け入れてください。それ以外の場合は、どうしていいか分からない場合は、さらに援助をしようとします。 –

+0

説明と提案をありがとう。私はIronPythonを削除し、Python 2.7を使用してコードを実行しました。ファイルを取得して解凍すると、データを解析してDBにドロップするC#コンソールアプリケーションがあります。私に時間があれば、オープンモードを変えてそれが役立つかどうかを調べるつもりです。それにかかわらず、努力のために+1。 –

関連する問題