#実現したい事 pandas dataframe を 1つずつ値を取り出して gmail 送信 本文にテキスト表示したい
目的は、pandas dataframe で取得した値を、既成のパッケージソフトにて 「メールでテキスト形式で取り込みしたい」からです。
ファイル添付やCSVでは使っているソフトが取り込みできません。
メール本文(テキスト形式)に、1行ずつ値を入れる事でしか、ソフトに取り込みできないので
データフレームの1行毎の値を改行を入れて整形して メール本文に挿入したい
データフレーム例
|商品名|単価|数量|小計|
|:--|:--:|--:|
|りんご|100円|2個|200円|
|みかん|200円|3個|600円|
|バナナ|300円|4個|1200円|
■(現在)データフレーム(df)をGmail本文に直接挿入・送信した場合の表示形式
row: 商品名 単価 数量 小計
1 りんご 100円 2 200円
2 みかん 200円 3 600円
3 バナナ 300円 4 1200円
###実現したい形 1つずつ値に改行を入れて整形した状態でメール本文・テキスト形式で表示したい
テキスト形式メール本文に、下記のようにデータフレームのインデックス+:値+改行 が1行になるように整形して出力したい。(既存のソフトが改行でしか値を取得できないため)
商品名:りんご
単価:100円
数量:2
小計:200円
商品名:みかん
単価:200円
数量:3
小計:600円
商品名:バナナ
単価:300円
数量:4
小計:1200円
###試した事1 pandas 上では このように表現できるのですが・・
for row in df.itertuples():
print(row.商品名) print(row.単価) print(row.数量) print(row.小計)
for文の形はGmail本文に入れたりする事ができるのでしょうか??
###試した事2 Dataframe の値に改行¥n,¥n¥rを入れてみましたが・・メールでは改行されませんでした
データの値1つずつに改行を入れたら、改行が入るのでは?と思ったのですが ダメでした
データフレームの値を列毎に追記変更
(改行は\n,\r,\r\n などでも試しました)
df['単価'] = '\n'+'単価:'+df['単価'].astype(str)
df['数量'] = '\n数量:'+df['数量'].astype(str)
df['小計'] = '\n小計:'+df['小計'].astype(str)
データフレームの値はこのように改行入りになりましたが・・
|商品名|単価|数量|小計|
|:--|:--:|--:|
|りんご|\n100円|\n2個|\n200円|
|みかん|\n200円|\n3個|\n600円|
|バナナ|\n300円|\n4個|v1200円|
結果はGmail 本文に dfと入れると、改行されずに改行マークが出力されただけでした
row: 商品名 単価 数量 小計
1 りんご \n100円 \n2 \n200円
2 みかん \n200円 \n3 \n600円
3 バナナ \n300円 \n4 \n1200円
##・実現できている部分のコード
PythonでGmailを送信する時にテキスト形式で本文にpandasのデータフレームをそのまま表示させる所まで出来ました
from email.mime.text import MIMEText from smtplib import SMTPException import smtplib from email.header import Header cset = 'utf-8' username = '****username gmail'#gmailのログインネーム password = '****qmgdqkkinxjkptax'#gmailセキュリティで生成したアプリパスワード from_address = '****@gmail.com'#送信元アドレス to_address = '*****@******' #宛先アドレス title = u'メールタイトル' con = smtplib.SMTP_SSL('smtp.gmail.com', 465) # FQDN とポート番号 con.login(username, password) con.set_debuglevel(True) body = "本文内容: {}".format(df)#フォーマットで dfをbodyに挿入しています。 msg = MIMEText(body) cset = 'utf-8' message = MIMEText(body, 'plain', cset) message['Subject'] = Header(title, cset) message['From'] = from_address message['To'] = to_address con.sendmail(from_address, [to_address], message.as_string()) con.close()
回答1件
あなたの回答
tips
プレビュー