2011-07-26 63 views
42

私のアプリでは、Excelファイルに書きます。書き込み後、ユーザーはファイルを開いてファイルを見ることができます。 さらに書き込みを行う前にファイルを閉じるのを忘れると、警告メッセージが表示されます。だから私はこのファイルがプロセスを書く前に開いていることを確認する方法が必要です。このタスクを実行するためのPythonコードを私に提供できますか?ファイルがPythonで開かれているかどうかを調べる

ありがとうございます。

答えて

30

と私はAPPEND /書き込み操作のためにそれを再度開く前に、その後、(ユーザーがExcelで開くことができます)、それを閉じて、その後、あなたはファイルに書いていることを前提としていファイルがまだExcelで開かれていないことを確認したいのですか?

これは、あなたがそれを行うべきかです:

try: 
    myfile = open("myfile.csv", "r+") # or "a+", whatever you need 
except IOError: 
    print "Could not open file! Please close Excel!" 

with myfile: 
    do_stuff() 
+2

動作しません。私はまだ別のプロセスによって 'w +'でopendされているファイルを開くことができます。 – Ace

+0

@Ace:あなたはExcelについて話していますか?この質問は、Excelとそれがファイルロックにどのように影響するかについてです。 –

+1

これはWindows固有の問題です.Excelについての質問は理にかなっていますが、すべてのシナリオでそうであるとは限りません。たとえば、ボリュームがネットワークにマウントされている場合、ネットワーク上の別のコンピュータ、特にUNIXまたはLinuxサーバーまたはクライアントでこのファイルを試すと、ファイルが開いているかどうかを知ることができません。 – Havok

3

ファイルとしてopen( "path")を使うことができます:自動的に閉じるようにします。他のプロセスで開いている場合は、をTimsの例のように試してみてください。あなたのコード:)

try: 
    with open("path", "r") as file:#or just open 
     #Code here 
except IOError: 
    #raise error or print 
+5

キャッチしたい例外を指定しないで決して 'except'を実行しないでください。また、あなたの 'try'ブロックの範囲が広すぎます - Shansalは、ファイルをまったく開くことができるかどうかを確認したいと考えています。ファイルへの書き込み中のエラー処理(または 'with'ブロックに何が起こっても)は別々にする必要があります。 –

+0

指摘に感謝します:) – thabubble

+0

上記の回答と同様、これはOPが求めていたこととは何の関係もありません。 –

28

あなたが気にすべてが現行のプロセスであれば、簡単な方法は、ファイルオブジェクトの属性を使用することですが

f = open('file.py') 
if f.closed: 
    print 'file is closed' 
を「閉じました」

これは、ファイルが他のプロセスによって開いているかどうかを検出しません。

ソース:Windows 10上でExcelと、この特定の問題に対処するとき、他の提供例のhttp://docs.python.org/2.4/lib/bltin-file-objects.html

+20

'.closed'属性は、ファイルが現在のPythonプロセスによって閉じられているかどうかをチェックします。他のプロセスがファイルを開いているか閉じているかはチェックしません。 – temoto

+0

@Rmheroありがとう、私はこれを探していた – Veltro

+7

@Rmhero:あなたの答えを削除することを検討してください、それは間違っているので、人々は意図したものとは異なる動作をするコードを書くことができます。 @temotoが説明するように動作します。これを見るには、 'ipython'シェルを2つ開き、' f = open( 'foo.txt'、 'w') 'を開きますが、' f = open( 'foo.txt'、 'r') 'もう片方。 'f.closed is False'ですが、第2の端末の' f.close() 'はこれを' f.closed is True'にするだけで十分です。 –

2

どれも私のために働くんだろう、私がしようとすると、ファイルの名前を変更したと考えることができる唯一の他のオプションやディレクトリにファイルを一時的に格納し、名前を変更し直します。

+0

ファイルのユーザーがほとんどない場合、これは悪い解決策ではありません。プライベートファイルのロックメカニズムのようなものです。 –

+0

これは非常にWindows固有のものであることに注意してください。ほとんどの他のOSは既に開いている場合、ファイルの名前を喜んで変更します。 – RandomInsano

関連する問題