关闭已经在Python中打开csv

时间:2017-12-01 10:30:27

标签: python python-3.x csv tkinter

有没有办法让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")

3 个答案:

答案 0 :(得分:2)

尝试使用with上下文,它将在上下文结束时顺利管理关闭(__exit__)操作:

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

答案 1 :(得分:0)

您也可以尝试将文件复制到临时文件,然后随意打开/关闭/删除它。但是,它要求您具有对原始文件的读取权限。

在这个例子中,我有一个文件" test.txt"这是只写的(chmod 444),它会抛出" Permission denied"如果我尝试直接写它错误。我将它复制到一个临时文件中,该文件包含" 777"权利,以便我可以用它做我想做的事情:

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")

答案 2 :(得分:-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