检查文件是否在Python中打开

时间:2011-07-26 06:10:32

标签: python excel

在我的应用中,我写了一个excel文件。写完后,用户可以通过打开文件来查看该文件。 但是,如果用户在进一步写入之前忘记关闭文件,则应显示警告消息。所以我需要一种方法来检查这个文件在写入过程之前是否打开。你能为我提供一些python代码来完成这项任务吗?

提前致谢。

7 个答案:

答案 0 :(得分:37)

如果你关心的只是当前流程,一种简单的方法是使用文件对象属性“关闭”

f = open('file.py')
if f.closed:
  print 'file is closed'

这不会检测文件是否被其他进程打开!

来源:http://docs.python.org/2.4/lib/bltin-file-objects.html

答案 1 :(得分:34)

我假设您正在写入文件,然后关闭它(因此用户可以在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 :(得分:5)

在Windows 10上使用excel处理此特定问题时,其他任何提供的示例都不适合我。我能想到的唯一其他选项是尝试暂时重命名包含该文件的文件或目录,然后重命名它回来。

import os

try: 
    os.rename('file.xls', 'tempfile.xls')
    os.rename('tempfile.xls', 'file.xls')
except OSError:
    print('File is still open.')

答案 3 :(得分:3)

您可以使用open(“path”)作为文件:以便它自动关闭,否则如果它在另一个进程中打开,您可以尝试 如在Tims示例中,您应该使用除IOError之外的代码来忽略任何其他问题:)

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

答案 4 :(得分:0)

使用

try:
with open("path", "r") as file:#or just open

在通过其他进程打开文件(即用户手动打开文件)时可能会造成一些麻烦。 您可以使用win32com库解决问题。 下面的代码检查是否打开了任何excel文件,并且没有一个与您特定文件的名称匹配,请打开一个新文件。

import win32com.client as win32
xl = win32.gencache.EnsureDispatch('Excel.Application')

my_workbook = "wb_name.xls"
xlPath="my_wb_path//" + my_workbook


if xl.Workbooks.Count > 0:
    # if none of opened workbooks matches the name, openes my_workbook 
    if not any(i.Name == my_workbook for i in xl.Workbooks): 
        xl.Workbooks.Open(Filename=xlPath)
        xl.Visible = True
#no workbooks found, opening
else:  
    xl.Workbooks.Open(Filename=xlPath)
    xl.Visible = True

'xl.Visible = True is not necessary, used just for convenience'

希望这会有所帮助

答案 5 :(得分:0)

就用这个功能吧。它将关闭任何已经打开的 excel 文件

import os

def close():

    try:
        os.system('TASKKILL /F /IM excel.exe')

    except Exception:
        print("KU")

close()

答案 6 :(得分:-1)

if myfile.closed == False:
   print("File is still open ################")