質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

SMTP

SMTP(Simple Mail Transfer Protocol)はIPネットワークでemailを伝送する為のプロトコルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

Q&A

解決済

1回答

2674閲覧

Python/Gmailの送信する時、本文(テキスト形式)にpandasのデータフレームを1行毎に整形して表示させたい

dub

総合スコア23

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

SMTP

SMTP(Simple Mail Transfer Protocol)はIPネットワークでemailを伝送する為のプロトコルです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

selenium

Selenium(セレニウム)は、ブラウザをプログラムで作動させるフレームワークです。この原理を使うことにより、ブラウザのユーザーテストなどを自動化にすることができます。

0グッド

1クリップ

投稿2021/07/19 09:15

編集2021/07/19 09:48

#実現したい事 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()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/07/19 09:33

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
dub

2021/07/19 09:38

ご指摘ありがとうございます。修正しました
guest

回答1

0

ベストアンサー

bodyに文字列を作っていけばいいので、以下のような感じでできるでしょう。

python

1body = "本文内容:\n" 2for row in df.itertuples(): 3 body += row.商品名 + "\n" 4 body += row.単価 + "\n" 5 body += row.数量 + "\n" 6 body += row.小計 + "\n" 7 body += "\n"

もうちょとスマートな方法もありそうですが。

投稿2021/07/19 10:44

TakaiY

総合スコア12666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dub

2021/07/20 23:27

ありがとうございます!無事 解決しました!感謝します
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問