5

.zip アーカイブを取得し、.zip 内のファイルを取得して、そのデータを抽出する必要があります。.zip アーカイブは電子メール メッセージ ファイルに添付されます。メール プロトコルを使用してメールボックスにアクセスしていません。メッセージを解析できます...

...
from email.parser import Parser
...
for fileName in os.listdir(mailDir):
    ...
    message = Parser().parse(open(mailDir + '/' + fileName, 'r'))
    ...
    for part in message.walk():
        if part.get_content_type() == 'application/octet-stream':

このコードを最初に書き始めたとき、.csv が添付されたメールに対してテストを行っていましたが、添付ファイルへのアクセスやデータの取り出しに問題はありませんでしたが、現在は .zip (以前に使用されたファイルを含む) を含むメールに対して作業しています。 .csv) 行き詰まっています。追加した...

import zipfile

...しかし、zipfileを使用できるようにするには、添付された.zipを実際にファイルシステムに保存する必要があるようです。私はむしろこれをやりたくないので、単純に使用できると思いました...

zipfile.ZipFile(the_base64_string_from_message, 'r')

しかし、それは失敗しました。ファイルシステムに .zip アーカイブを作成せずにアーカイブにアクセスするにはどうすればよいですか? さらに、おそらくメールモジュールを使用するべきではありません(添付ファイルを簡単に見つけることができるように使用しただけです)???

4

2 に答える 2

4

StringIO は私が見逃していた魔法でした。ここに解決策があります...

import base64, StringIO, zipfile

# base64 string from the message
attachment = '...'
attachment = base64.b64decode(attachment)
attachment = StringIO.StringIO(attachment)

zipFile = zipfile.ZipFile(attachment, 'r')

zipfile.ZipFile インスタンスを生成します。

于 2013-10-21T23:41:32.930 に答える