2017-03-17 19 views
0

.msgファイルから添付ファイルを抽出しようとしています。 github上のソリューションは、私が正しく理解するにはあまりにも詳細であり、ここの答えは私が望むほど完全ではありません。このexampleは私のような別の質問で指摘されましたが、私はその機能の仕組みを理解することができませんでした。私はここでライン20に貼り付けられています19.1.14 email:例 - 第5例の問題

import os 
import sys 
import email 
import errno 
import mimetypes 

from argparse import ArgumentParser 

def main(): 
    parser = ArgumentParser(description = """\ 
Unpack a MIME message into a directory of files. 
""") 
    parser.add_argument('-d', '-- C:\\Users\\MikeS\\Documents\\ImproveBKFS\\Python\\msg_extract', required = True, 
        help = """Unpack the MIME message into the named 
        directory, which will be created if it doesn't already 
        exist.""") 
parser.add_argument('TestFile.msg') 
args = parser.parse_args() 

with open(args, 'wb') as fp: #issues with open(args) 
    msg = email.message_from_file(fp) 

try: 
    os.mkdir(args.directory) 
except FileExistsError: 
    pass 

counter = 1 
for part in msg.walk(): 
#multipar/* are just containers 
    if part.get_content_maintype()=='multipart': 
     continue 
    #Applications should really sanitize the given filename so that an 
    # email message can't be used to overwrite important files 
    filename = part.get_filename() 
    if not filename: 
     ext = mimetypes.guess_extension(part.get_content_type()) 
     if not ext: 
      #Use a generic bag-of-bit extension 
      ext = '.bin' 
     filename = 'part-%03d%' % (counter, ext) 
    counter +=1 
    with open(os.path.join(arg.directory, filename), 'wb') as fp: 
     fp.write(part.get_payload(decode=True)) 

if __name__ == '__main__': 
    main() 

:ここでは、これまで私のコードは次のとおりです。オープン(MSGFILE)とFPとして -
は、私は近くにいますが、それは私が開くことshoudが何であるかを把握することはできませんと信じて私の入力とエラーのメッセージです。

PS C:\Users\MikeS\Documents\\Python\msg_extract> py -3  get_payload_3.py -d ^V TestFile.msg 
Namespace(C:\Users\MikeS\Documents\Python\msg_extract='\x16', TestFile.msg='TestFile.msg') 
Traceback (most recent call last): 
    File "get_payload_3.py", line 53, in <module> 
    main() 
    File "get_payload_3.py", line 26, in main 
    with open(args) as fp: #something with this line 
TypeError: invalid file:  Namespace(C:\Users\MikeS\Documents\Python\msg_extract='\x16',  TestFile.msg='Test 
File.msg') 

私がこの機能を提供するために必要な入力のタイプや手掛かりは、大きな助けになります。ありがとう

答えて

0

その文字列の目的は何ですか:'-- C:\\Users\\MikeS\\Documents\\ImproveBKFS\\Python\\msg_extract'

使用シンプルなもの、--dir

parser.add_argument('-d', '--directory', required = True, 
       help = """Unpack the MIME message into the named 
       directory, which will be created if it doesn't already 
       exist.""") 

ようにあなたはargsを解析した後、あなたは、パーサーが発見したかを理解してそれを印刷:

args = parser.parse_args() 
print(args) 

次にあなたがこの「ディレクトリ」を必要とする場合、使用args.directoryのようなものです。

だけでなく、この変更:引数の

with open(args.outfile, 'wb') as fp: #issues with open(args) 
msg = email.message_from_file(fp) 

私はあなたがdest(または長いオプション名を)混乱している疑いがある:

parser.add_argument('TestFile.msg') 

parser.add_argument('outfile') 

および使用に値は、デフォルトまたはコマンドラインから取得する値のいずれかです。

'C:¥Users¥MikeS¥Documents¥ImproveBKFS¥Python¥msg_extract'と 'TestFile.msg'はディレクトリとファイル名のようです。しかし、彼らはadd_argumentdestスロットに使用されています。​​のドキュメントを読んで時間を過ごす必要があるかもしれませんし、いくつかの簡単な例で練習する必要があります。

+0

ありがとう、私はpython.orgのargparseのドキュメントを見てきましたが、このインスタンスでこれを使用する方法は少し混乱していましたが、コードを分割することでより完全に消化することができました。 – Mwspencer

関連する問題