2011-10-21 1 views
6

のは、私が以前に執筆のために、存在しなかったファイル、開くことを言ってみましょう:のみPythonのファイルオブジェクトとファイルを削除する

f = open('/tmp/test.txt', 'w') 

この行はファイル「/ tmp/testディレクトリに実行された後に。 txt 'が作成されます。ファイルオブジェクト(f)のみでファイルを削除(削除)する最もクリーンな方法は何ですか?

答えて

19

複数のパスがrefer to the same fileといくつかのファイル(ソケットなど)にパスがない場合でも、ファイルハンドルのみを削除することはできません。したがって:

import os 
f = open('/tmp/test.txt', 'w') 
os.unlink(f.name) 
# You can still use f here, it's just only visible for people having a handle. 
# close it when you're finished. 

しかし、あなたはがあることを行うべきではありません - あなたの問題を解決するためのより良い方法があります。ファイルを自動的に削除するtempfileモジュールを使用するか、ファイルハンドルが必要なだけで書き込まれるコンテンツについて気にしない場合は/dev/nullに書き込みます。あなたはnameメンバーからファイル名を取得し、いつものように削除することができます

+2

+1 - 私は一時ファイルが本当に質問者が必要とするものだと思っています。 –

4

In [1]: f = open('/tmp/test.txt', 'w') 

In [2]: f.name 
Out[2]: '/tmp/test.txt' 
2

全答:

f = open('/tmp/test.txt', 'w') 
f.close() 

os.remove(f.name) 

をあなたは削除する前に、ファイルを閉じる必要があります(ドキュメントには、それが下の例外をスローすることを言いますファイルが開かれている場合はWindows - これはチェックされませんでした)。あなたの場合のfは単なるハンドルです。これはファイル自体ではないため、直接削除することはできません。

0

必要に応じて、ファイルを作成せずに立ち去ることもできます。必要なものがファイルのようなオブジェクトであれば、ほとんどの場合、ファイルの代わりにio.StringIOのインスタンスを使用できます。これは、不必要な入出力操作を防ぐのに便利です。

>>> from io import StringIO 
>>> f=StringIO() 
>>> f.write(u'Hello, world!') 
13 
>>> f.seek(0) 
0 
>>> f.read() 
u'Hello, world!' 
>>> f.close() 
関連する問題