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

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

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

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

Q&A

解決済

1回答

6864閲覧

.msgファイルをフォルダ指定しすべて読み込む

seikimatsu

総合スコア18

Python

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

0グッド

0クリップ

投稿2018/10/23 04:06

編集2018/10/23 04:21

前提・実現したいこと

pythonでmsgファイルを指定したフォルダからすべて読み込み出力させたいのですが、
どうにもうまくいきません

import win32com.client import sys args = sys.argv from glob import glob outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI") msg = outlook.OpenSharedItem(r"args[1] + '/*.msg'") for file in glob(msg): with open(file, "r",encoding="utf-8") as f: for line in f: print(line):

pyファイル名は「file.py」です。
msgファイルはローカルディスクの中の「python」の中、
「test」という名前のフォルダの直下にあるので、
コマンドプロンプトでは

C:\python> file.py ./test

これで実行してみると、
「pywintypes.com_error: (-2147352567, '例外が発生しました。', (4096, 'Microsoft Outlook', 'パスまたは URL が無効です。」
と表示されます。
OpenSharedItemの中身が問題だとは思うのですがどう修正してよいやらいまいちわかりません。
お力添えいただければ幸いです

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

python 3.6

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

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

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

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

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

Udomomo

2018/10/23 04:12

指定したファイルパスが違っている可能性があります。このコードをどのようなコマンドで実行していますか?また、実際のファイルパスはどうなっていますか?
seikimatsu

2018/10/23 04:22

説明不足で申し訳ありません。質問内容に追記させていただきました。
guest

回答1

0

ベストアンサー

r"args[1] + '/*.msg'"という書き方が違っています。これだとargs[1]という文字列が渡ってしまい、変数が展開されません。
r"{}/*.msg".format(args[1])としてみてください。

また、正規表現では*は直前の文字の0回以上の繰り返しという意味なので、この書き方でマッチするファイルはほぼない気がします。(雑にやるなら[0-9a-zA-Z]+とすると、英数字のみの名前であればすべてマッチします)
さらに、.は任意の1文字という意味なので、エスケープしない場合、ないとは思いますがamsgみたいな拡張子のファイルもマッチしてしまいます。

正規表現は想定外の文字列がマッチしないもほど良いものですので、ファイル名の形式に合わせて適切な指定をしてみてください。

投稿2018/10/23 05:18

編集2018/10/23 05:23
Udomomo

総合スコア1524

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

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

seikimatsu

2018/10/23 06:31 編集

ありがとうございます。 正規表現について理解度が足りませんでした。 「r"{}/*.msg".format(args[1])」に修正し、再度実行したところ、 「'Microsoft Outlook', "'C://python/text/*.msg' を開けません。」 とエラーが出ました。ファイルを開くための権限の設定などは済ませた状態です。 大変申し訳ありませんが、原因等ご教授頂ければ幸いです。
Udomomo

2018/10/23 06:34

ドキュメントを見たところ、OpenSharedItemメソッドの引数はString(絶対パス)なので、そのまま正規表現を渡してもうまく行かなそうですね。 まず正規表現をもとにファイルを探索し、該当するパスがあればそれを引数に渡して出力されるのを繰り返した方がよいかもしれません。
seikimatsu

2018/10/24 04:06

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問