2016-11-09 17 views
0

添付ファイルを作成したら電子メールを送信してから、そのファイルを削除してjpgファイルを残します。ファイルの実際の名前は日時によって変わりますが、私はそれが何であるか分かりません。 [ERRNO 2]いいえそのようなファイルまたはディレクトリ::と間違っている何/mnt/usb/motion/*.jpg "ファイル名にワイルドカードを使用してpythonを使用して電子メールにファイルを添付する方法

例外IOError - 私はこれは私にエラーを与えるこの

#Email body 
rstime = datetime.datetime.now().strftime('%d %b %Y at %H:%M:%S') 
body = 'Picture saved of movement at front of house ' + str(rstime) 

msg.attach(MIMEText(body, 'plain')) 
fp = open('/mnt/usb/motion/*.jpg', 'rb') 
img = MIMEImage(fp.read()) 
fp.close() 
msg.attach(img) 

#remove file after emailing 
os.remove('/mnt/usb/motion/*.jpg') 

を使用してみました私のコード?ファイル名を入力すると動作しますが、ワイルドカードを使用したいと思います。

+0

あなたは 'glob'モジュールを使いたいでしょう。すべてのファイルを繰り返し、1つずつ添付します。ワイルドカードはPythonで自動的に展開されません(あなたのシェルがあなたのためにそれを行う方法で) – SuperSaiyan

答えて

0

このようにワイルドカードを使用することはできません。 2つのファイルがワイルドカードと一致する場合はどうなりますか?両方のファイルを同じオブジェクトで開く必要がありますか?

たとえば、次のようなワイルドカードを使用できます。 python globモジュール:

import glob 
# Email body 
rstime = datetime.datetime.now().strftime('%d %b %Y at %H:%M:%S') 
body = 'Picture saved of movement at front of house ' + str(rstime) 

msg.attach(MIMEText(body, 'plain')) 
files = glob.glob("/mnt/usb/motion/*.jpg") 
firstFile = files[0] 
fp = open(firstFile, "rb"); 
img = MIMEImage(fp.read()) 
fp.close() 
msg.attach(img) 

# remove file after emailing 
os.remove(firstFile) 
+0

は、フォルダ内に2つのファイルがあるべきではないが、最初のものを送ります。ありがとう – tamus

+0

これは、globがデフォルトでソートされたリストを返すため、最初のものを送信します。あなたのケースでは最も古いタイムスタンプはリストの先頭にあります –

0

fnmatch

import fnmatch 
import os 

files = {} 
working_dir = '/mnt/usb/motion/' 

for filename in fnmatch.filter(os.listdir(working_dir), '*jpg'): 
    filepath = os.path.join(working_dir, filename) 
    files[filename] = open(filepath).read() 
    os.remove(filepath) 

を見てみましょう。しかし、あなたがjoinに、この場合のファイルパスとファイル名を持っていないので、globモジュールは、しかし良く見えます。

+0

ありがとうございます - 私はglobモジュールの提案が好きで、それを試していましたが、構文を正しく取得できませんでした。それは別のオプションを与えるので、ありがとう – tamus

関連する問題