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

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

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

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

Q&A

解決済

2回答

1623閲覧

'str'オブジェクトに 'get'属性がありません

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

0クリップ

投稿2020/08/12 12:50

前提・実現したいこと

https://teratail.com/questions/283955の質問の続きになります。
アドバイスをいただいて修正してみましたが、 「'str'オブジェクトに 'get'属性がありません」と出ました。
getについて、何か設定しないといけないのかと思うのですが、すみません、どうやっていいのかわからず再度質問させていただきました。
アドバイスをお願いいたします。

テキストデータ

From: AAAAAAAAAA@aaaaaaaa.com Sent: Friday, July 8, 2025 9:25 PM To: BBBBBBBBBB@bbbbbbb.com Cc: DDDDDDDDDD@ddddddd.com Subject: YYYYYYYYYYY AAAAAAA様 お世話になります。 明日の予定はこのようになります。 どうぞよろしくお願いいたします。 BBBBBBBBB ________________________ From: ABBBBBBBBB@bbbbbbbb.com Sent: Friday, July 8, 2025 9:25 PM To: AAAAAAAAAA@bbbbbbb.com Cc: CCCCCCC@ddddddd.com Subject: Re:YYYYYYYYYYY BBBBBBB様 お世話になります。 明日の予定についてお知らせください。 どうぞよろしくお願い板致します。 AAAAAAAAA ________________________ From: FFFFFFFF@bbbbbbbb.com Sent: Friday, July 8, 2025 9:25 PM To: DDDDDDD@bbbbbbb.com Cc: CCCCCCC@ddddddd.com Subject: Re:Re:YYYYYYYYYYY FFFFFFF様 明日の予定について教えてください。 DDDDDDDDD

発生している問題・エラーメッセージ

File "C:/Users/XXXXXXXXXX/YYYYYYYYYYYY.py", line 17, in <module> From=i.get("From:") AttributeError: 'str' object has no attribute 'get'

該当のソースコード

python3.7

data=open('C:/Users/XXXXXXXXXX/Desktop/テキストデータ.txt',"r",encoding='utf-8') txt=data.read() import xlsxwriter wb = xlsxwriter.Workbook('C:/Users/XXXXXXXXXX/Desktop/out.xlsx') ws1 = wb.add_worksheet('sheet') row_index=0 for i in txt : From=i.get("From:") Sent=i.get("Sent:") To=i.get("To:") Cc=i.get("Cc:") Subject=i.get("Subject:") print("\n--------------------------------------------") print("{f}{s}{t}{c}\n{s1}".format(f=From,s=Sent,t=To,c=Cc,s1=Subject)) print("--------------------------------------------") if From: ws1.write(row_index, 0, From) if Sent: ws1.write(row_index, 1, Sent) if To: ws1.write(row_index, 2, To) if Cc: ws1.write(row_index, 3, Cc) if Subject: ws1.write(row_index, 4, Subject) row_index=row_index+1 wb.close()

試したこと

getについて調べてみましたが、どのようにしたらいいのかわかりませんでした。

補足情報(FW/ツールのバージョンなど)

Windows10

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

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

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

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

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

guest

回答2

0

ベストアンサー

メールは行指向なんで1行ずつ読むほうが処理しやすい。

Python

1import xlsxwriter 2 3data = open('mailcheck.txt', "r", encoding='utf-8') 4 5 6wb = xlsxwriter.Workbook('out.xlsx') 7ws1 = wb.add_worksheet('sheet') 8 9row_index = 0 10 11for i in data.readlines(): 12 if i.startswith("From: "): 13 From = i[len("From: "):-1] 14 ws1.write(row_index, 0, From) 15 16 if i.startswith("Sent: "): 17 Sent = i[len("Sent: "):-1] 18 ws1.write(row_index, 1, Sent) 19 20 if i.startswith("To: "): 21 To = i[len("To: "):-1] 22 ws1.write(row_index, 2, To) 23 24 if i.startswith("Cc: "): 25 Cc = i[len("Cc: "):-1] 26 ws1.write(row_index, 3, Cc) 27 28 if i.startswith("Subject: "): 29 Subject = i[len("Subject: "):-1] 30 ws1.write(row_index, 4, Subject) 31 32 if i == "\n" and (From or Sent or To or Cc or Subject): 33 print(f"{From}, {Sent}, {To}, {Cc}\n{Subject}") 34 print("--------------------------------------------") 35 From = None 36 Sent = None 37 To = None 38 Cc = None 39 Subject = None 40 row_index = row_index + 1 41 42wb.close() 43data.close()

投稿2020/08/12 13:51

Daregada

総合スコア11990

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

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

退会済みユーザー

退会済みユーザー

2020/08/12 21:33

ありがとうございます。 うまくいきました。 もうひとつ勉強のために教えていただきたいのですが、 メールの本文を抜き出す場合には一塊のメールの内容からFrom, Sent, To, Cc,Subjectを削除する方法で考えていったらよろしいのでしょうか。
Daregada

2020/08/12 22:43

ヘッダー情報が空行で終わってからが本文です。あなたが利用しているテキストデータはメールそのものではないようですが、そこは同じですね。本文の終わりは本当のメールデータでは . だけの行なのですが、(アプリが処理するために)我々には見えないので、本文が始まってから次のヘッダーが出てくるまで、または、ファイル末尾に到達するまでを本文とすればよいでしょう。
退会済みユーザー

退会済みユーザー

2020/08/12 23:24

ありがとうございます。
guest

0

文字列の変数にgetと言うメソッドはない、ってことでエラーになってます。

for i in txt :

このiは文字列ですんで、以下のi.getがエラーってことですね

投稿2020/08/12 13:02

y_waiwai

総合スコア88042

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

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

退会済みユーザー

退会済みユーザー

2020/08/12 13:36

ありがとうございます。 iの文字列からgetを使って取り出したかったのですが、i.getでは取り出せないということなのですね……
退会済みユーザー

退会済みユーザー

2020/08/12 21:16

はい、そうです。 ありがとうございます。 試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問