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

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

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

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

Q&A

解決済

1回答

3736閲覧

pythonでフォルダを監視し,そのフォルダに新たにファイルが生成されたらそのファイルを読み込みたい

bas

総合スコア9

Python

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

0グッド

0クリップ

投稿2020/08/28 05:55

指定したフォルダを監視して,そのフォルダにtiffファイルが作成されたらそのtiffファイルを読み込む処理を行いたいです。
しかし,フォルダが空の時にtiffファイルが生成された時は処理がうまくいくのですが,フォルダに既に別のtiffファイルがある場合だとエラーが生じます。
osはwindows10を使用しています。

コード

import time import os from watchdog.events import FileSystemEventHandler from watchdog.observers import Observer import tifffile watch_dir = "C:\Users\hotaru\Desktop\monitor_test" class ChangeHandler(FileSystemEventHandler): def on_created(self, event): filepath = event.src_path img = tifffile.imread(filepath) if __name__ == "__main__": while 1: event_handler = ChangeHandler() observer = Observer() observer.schedule(event_handler, watch_dir, recursive=True) observer.start() try: while True: time.sleep(0.1) except KeyboardInterrupt: observer.stop() observer.join()

エラー内容

Exception in thread Thread-6: Traceback (most recent call last): File "C:\Users\hotaru\Anaconda3\lib\threading.py", line 916, in _bootstrap_inner self.run() File "C:\Users\hotaru\Anaconda3\lib\site-packages\watchdog\observers\api.py", line 203, in run self.dispatch_events(self.event_queue, self.timeout) File "C:\Users\hotaru\Anaconda3\lib\site-packages\watchdog\observers\api.py", line 376, in dispatch_events handler.dispatch(event) File "C:\Users\hotaru\Anaconda3\lib\site-packages\watchdog\events.py", line 336, in dispatch }[event.event_type](event) File "<ipython-input-1-4c37897adf13>", line 13, in on_created img = tifffile.imread(filepath) File "C:\Users\hotaru\Anaconda3\lib\site-packages\tifffile\tifffile.py", line 444, in imread with TiffFile(files, **kwargs_file) as tif: File "C:\Users\hotaru\Anaconda3\lib\site-packages\tifffile\tifffile.py", line 1745, in __init__ fh = FileHandle(arg, mode='rb', name=name, offset=offset, size=size) File "C:\Users\hotaru\Anaconda3\lib\site-packages\tifffile\tifffile.py", line 4683, in __init__ self.open() File "C:\Users\hotaru\Anaconda3\lib\site-packages\tifffile\tifffile.py", line 4696, in open self._fh = open(self._file, self._mode) PermissionError: [Errno 13] Permission denied: 'C:\Users\hotaru\Desktop\monitor_test\2020_1_9_13_59_47_depthfield.tiff'

img = tifffile.imread(filepath)の部分でエラーが生じているようです。
尚,tifffileモジュールを使用してtiff画像を読み込みたいです。
それ以外の制約はありません。
どのように解決すればよいのか教えて頂きたいです。
よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

【python】watchdogでフォルダ監視に記載あるように、そのディレクトリにファイルができるとき、通知から実際にアクセスできるまでにタイムラグがあるようです。
os.path.getsize on Windows reports full file size while copyingを参考に以下のように待ってみてはいかがでしょうか?

Python

1# アクセスできるまで待つ 2def read_wait( path): 3 #print(path) 4 while True: 5 try: 6 new_path= path + "_" 7 os.rename(path,new_path) 8 os.rename(new_path,path) 9 time.sleep(0.05) 10 break 11 except OSError: 12 time.sleep(0.05) 13# 略 14 def on_created(self, event): 15 filepath = event.src_path 16 read_wait(filepath) # *** 17 img = tifffile.imread(filepath)

投稿2020/08/28 06:27

can110

総合スコア38266

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

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

bas

2020/08/28 10:36

うまくいきました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問