1

email.parserPythonのモジュールを介して取得した電子メールメッセージがあります。

parser = email.parser.Parser()
msg1 = parser.parse(sys.stdin)

このオブジェクトのコピーを作成したいのですが、どうすればよいかわかりません。モジュールを使用できcopyます...

msg2 = copy.deepcopy(msg1)

...しかし、MIMEメッセージにいくぶん恣意的なパーツのツリーが含まれている可能性があることを考えると、これが正しい解決策であるかどうかはわかりません。メッセージをシリアル化して再解析できます...

msg2 = parser.parse(msg1.as_string())

as_string...しかし、ドキュメントは、メソッドが常に正しいことを行うとは限らないことを示唆しています。StringIOオブジェクトを作成して使用できますgenerator...

buf = String()
g = email.generator.Generator(buf)
g.flatten(msg1)
msg2 = parser.parse(buf.getvalue())

...しかし、それは、すでに一度解析されたものをコピーするための非常に多くの作業のように思えます。

モジュールを使用するのcopyが最も簡単な解決策のように思えますが、私はcopyモジュールに慣れていません。私は正しいことをしていますか?

4

1 に答える 1

2

これはMIMEメッセージであるため、属性がどのようにネストされていても、終わりがあると想定できる場合があります。その場合、deepcopyはメッセージのすべての属性に対して再帰的なコピーを実行する必要があるため、copy.deepcopyを実行するのは正しいことです。

于 2012-08-15T01:34:23.417 に答える