Python 3.9でファイルをオープンしているかどうかを確認する。

ファイルがオープンされているかどうかを確認してから処理を行う Python スクリプトがあるのですが、どうも Windows 10 20H2 (ビルド19042.685)のあたりから API が変わったのかうまく識別できないようになりました。
これまで判定していたのは以下のようなコードで、Google で検索してもこれがあがってきます。
try:
    open(filename, "a+")
Except IOError:
    print("cannot open ", filename)
実際には処理したいファイルをワイルドカードでリストを用いて、
for f in files:
    try:
        open(f, "a+")
    Except IOError:
        print("cannot open ", f)
のような形で使用しますが、オープンされているファイルが上手く処理されなくなりました。

それだと困ったことになるので、その識別部分を以下のように変えて対応しました。

from os import rename

open_check = 'unique filename'
for f in files:
    try:
        rename(f, open_check)
        rename(open_check, f)
    Except OSError:
        print("cannot open ", f)
こちらのほうだときちんと識別してくれるようになりました。

変数 open_check のユニークなファイル名として mkstemp() を使うと、リストの読み込みがなぜか一つおきになってしまいうまくいかなかったので、固定にしてみました。もしかしたら mkstemp() が返すのはフルパス名なので、 os.path.basename() でファイル名部分だけを切り出して使えばいいのかもしれませんが、一応用は足りたのでこれでいくことにします。

0 件のコメント:

コメントを投稿

Vimの補完プラグインをインストール。その4

Vimの補完プラグインをインストール。その3 で、 ddc-tabnine が使えそうです、などと書いたのですが、早速やってみました。 まず、tabnineのバイナリを用意しないといけません。がどうにもTabNineのサイトがわかりにくいので、 tabnine-nvim にあるダ...