IT이야기

파일이 Python에서 열려 있는지 확인

cyworld 2021. 9. 21. 20:00
반응형

파일이 Python에서 열려 있는지 확인


내 앱에서 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()

현재 프로세스만 신경쓰면 쉬운 방법은 파일 객체 속성 "closed"를 사용하는 것입니다.

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

파일이 다른 프로세스에서 열려 있는지 감지하지 않습니다!

출처: http://docs.python.org/2.4/lib/bltin-file-objects.html


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.')

open("path")을 파일로 사용할 수 있습니다: 자동으로 닫히지 않으면 다른 프로세스에서 열려 있는 경우 Tims 예제에서처럼 시도할 수 있습니다.

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

사용

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'

이것이 도움이 되기를 바랍니다.

ReferenceURL : https://stackoverflow.com/questions/6825994/check-if-a-file-is-open-in-python

반응형