2017-12-01 78 views
0

ファイルが既に開いていることをPythonがクローズする方法はありますか?既に開いているcsvをPythonで閉じる

または非常に少なくとも、回避するために、ファイルを開いたりpermission error.

のカスタム書かれたエラーメッセージがポップアップであることを、ポップアップを表示します。私はオープンなソリューションをたくさん見てきた

PermissionError: [Errno 13] Permission denied: 'C:\\zf.csv' 

ファイルを開き、pythonで閉じます。しかし、私の場合。私はCSVを開いたままにして、その仕事を実行しようとしました。

現在開かれているcsvを閉じるようにするにはどうすればよいですか?

私は以下のバリエーションを試しましたが、私はすでにPythonを通して以前の時点でcsvを開いていると期待しているので、動作しないようです。私はこれを複雑に過ぎていると思う。

f = 'C:\\zf.csv' 
file.close() 
AttributeError: 'str' object has no attribute 'close' 

これは、ファイルのオープンには言及せず、単に文字列であるため、エラーとなります。

たり...

theFile = open(f) 
file_content = theFile.read() 
# do whatever you need to do 
theFile.close() 

と同様に:

fileobj=open('C:\\zf.csv',"wb+") 

if not fileobj.closed: 
    print("file is already opened") 

私はすでに開いてCSVを閉じるにはどうすればよいですか?

メッセージボックスを追加するだけの方法がありますが、ファイルを検出できないようです。

filename = "C:\\zf.csv" 
if not os.access(filename, os.W_OK): 
    print("Write access not permitted on %s" % filename) 
    messagebox.showinfo("Title", "Close your CSV") 
+0

あなたがすることはできません – furas

+0

何かを:私は、私はそれでやりたいことができるように「777」の権限を持っている一時ファイルにコピーしますシステムがセキュリティのためにそれを制御するため、他のプログラムで開かれたクローズファイル。しかし、問題は、あなたが使用すべきではないフォルダにファイルを置くことができます - すべてのユーザーはドキュメントのための独自のフォルダを持っているためです。フォードやデスクトップに保存しようとしましたか? – furas

+0

BTW:「Permission denied」は、ファイルが開いているが、このフォルダ内のファイルを開く権限がないことを意味する必要はありません。 – furas

答えて

0

あなたはまたにファイルをコピーしようとすることができます一時ファイルを開き、自由にオープン/クローズ/削除できます。しかし、あなたはオリジナルへの読み込みアクセス権が必要です。

この例では、書き込み専用(chmod 444)のファイル "test.txt"があり、直接書き込みを試みると "Permission denied"エラーが発生します。あなたは、このエラーをキャッチして行うために、 `試みる/ except`を使用することができます

import tempfile, shutil, os 

def create_temporary_copy(path): 
    temp_dir = tempfile.gettempdir() 
    temp_path = os.path.join(temp_dir, 'temp_file_name') 
    os.chmod(temp_path, 0o777);   # give full access to the tempfile so we can copy 
    shutil.copy2(path, temp_path)  # copy the original into the temp one 
    os.chmod(temp_path, 0o777);   # replace permissions from the original file 
    return temp_path 

path = "./test.txt"      # original file 
copy_path = create_temporary_copy(path) # temp copy 
with open(copy_path, "w") as g:   # can do what I want with it 
    g.write("TEST\n") 
-1
f = open("C:/Users/amol/Downloads/result.csv", "r") 
print(f.readlines()) #just to check file is open 
f.close() 
# here you can add above print statement to check if file is closed or not. I am using python 3.5 
+0

'close()'の前にエラー/例外があれば 'close()'を実行しません。それを閉じることはありません。 – furas

+0

ここではメソッド –

+0

を除いてtryを追加できますが、例では使用していません – furas

2

コンテキストの最後でスムーズに近い(__exit__)の操作を管理しますwithコンテキストを、使用してみてください:

with open(...) as theFile: 
    file_content = theFile.read() 
+0

これは何も終了していないようです。 'theFile.close()'を呼び出さないでください。自動的に行われます。( 'C:\\ 1 \\ c.csv ')をtheFileとして使用します: file_content = theFile.read() theFile.close() –

+1

' theFile.close 'with'ブロックの終わりに。それができない場合、強制終了しません(別のプログラムで開かれても達成できません)が、エラーは発生せず、プログラムは続行されます。 – JulienD

関連する問題