2012-04-18 3 views
1

私はPython 2プログラムをPython 3に変換していますが、私はこのアプローチについてはわかりません。Python 3での電子メール処理のバイナリデータとテキストデータの両方にアクセスするにはどうすればよいですか?

プログラムは、STDINから1つの電子メールを読み込むか、電子メールを含むファイルが指定されています。プログラムは電子メールを解析し、電子メールを処理します。

私たちは、電子メール入力の生データをディスクに保存し、MD5ハッシュを行う必要があります。また、電子メール入力のテキストをPythonの電子メールパーサで実行してフィールドなどを抽出する必要があります。

Python 3では、データをどのように読み込むべきかがわかりません。 md5を実行するために生のバイナリデータが必要であり、ディスクに書き込むことができると信じています。電子メールライブラリで解析できるようにするには、テキスト形式でも必要であると私は理解しています。 Python 3はIO処理とテキスト処理に大きな変更を加えました。電子メールの未処理データを読み込み、同じデータをテキスト形式で使用する「正しい」方法はありません。

誰でもこれに関する一般的なガイダンスを提供できますか?

答えて

2

一般的なガイダンスでは、できるだけ早くUnicodeするためにすべてを変換し、それをそのままにしておきます。

strは古いunicodeであり、bytesは古いstrであることを覚えておいてください。

http://docs.python.org/dev/howto/unicode.htmlを参照してください。

Python 3では、データをどのように読み込むべきか私には不透明です。

ファイルを開くときにencodingと指定すると、自動的にユニコードが表示されます。 stdinから読んでいるなら、あなたはユニコードを取得します。バイナリデータを取得するにはstdin.bufferから読むことができます。

は、私たちはそれ

はい、あなたは上のMD5を行うためには、生のバイナリデータが必要と考えています。 encodeそれをハッシュする必要があるとき。

また、ディスクに書き込むことができます。

ファイルを開くときにencodingを指定し、ファイルオブジェクトでエンコードします。

電子メールライブラリで解析できるようにテキスト形式で入力する必要があることを理解しています。

しかし、ファイルを開くとデコードされるので、それはあなたが持つものです。


つまり、この質問は実際にはあまりにもスタックオーバーフローのためにオープンエンドです。特定の問題/質問がある場合は、戻ってきてください。

+0

stdinでエンコードすることはできません。しかし、Python 3のstdinからバイナリを読み込む方法は、すでに何度も答えられている質問です。 :-) –

+0

いいえ、これはPython 3です。stdinからunicodeを取得します。問題はバイナリになっていて、それは本当に問題ではありません。それは単なる自明なことです。あなたはstdin.bufferから読みます。 –

関連する問題