programing

Python에서 파일이 열려 있는지 확인합니다.

muds 2023. 6. 20. 21:53
반응형

Python에서 파일이 열려 있는지 확인합니다.

내 앱에서, 나는 엑셀 파일에 씁니다.작성 후 사용자는 파일을 열어 파일을 볼 수 있습니다.그러나 사용자가 더 이상 쓰기 전에 파일을 닫는 것을 잊으면 경고 메시지가 나타납니다.그래서 저는 쓰기 전에 이 파일이 열려 있는지 확인할 방법이 필요합니다.이 작업을 수행하기 위한 파이썬 코드를 제공할 수 있습니까?

현재 프로세스에만 관심이 있다면 "닫힌" 파일 개체 속성을 사용하는 것이 좋습니다.

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

이렇게 하면 파일이 다른 프로세스에서 열려 있는지 탐지할 수 없습니다!

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

파일에 쓴 다음 파일을 닫고(사용자가 Excel에서 열 수 있도록), 추가/쓰기 작업을 위해 다시 열기 전에 파일이 Excel에서 아직 열려 있지 않은지 확인하고 싶으십니까?

다음과 같은 방법이 있습니다.

while True:   # repeat until the try statement succeeds
    try:
        myfile = open("myfile.csv", "r+") # or "a+", whatever you need
        break                             # exit the loop
    except IOError:
        input("Could not open file! Please close Excel. Press Enter to retry.")
        # restart the loop

with myfile:
    do_stuff()

창에만 해당

윈도우 10에서 엑셀로 이 특정 문제를 다룰 때 제공된 다른 예시들은 저에게 효과가 없습니다.제가 생각할 수 있는 유일한 방법은 파일이 들어 있는 파일이나 디렉토리의 이름을 임시로 변경한 다음 다시 변경하는 것이었습니다.

import os

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

사용할 수 있습니다.with open("path") as file:자동으로 닫히도록 합니다. 그렇지 않으면 다른 프로세스에서 열려 있는 경우 IOError를 제외하고 코드의 다른 문제를 무시하지 않기 위해 사용해야 하는 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'

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

위의 방법으로 Excel 파일이 손상된 경우 이 방법을 사용해 보십시오.

이 함수는 파일 이름을 고유한 이름으로 변경하려고 시도합니다.파일이 이미 열려 있으면 OS에서 편집을 거부하고 OS 오류 예외가 발생합니다.내부 코드에 닿지 않아 엑셀 파일이 손상되지 않습니다.당신에게 효과가 있었다면 LMK.

def check_file_status(self):
try:
    os.rename("file1.xlsx", "file1.xlsx")
    print("File is closed.")
except OSError:
    print("File is opened.")
if myfile.closed == False:
   print("File is still open ################")

그냥 이 기능을 사용하세요.이미 열려 있는 Excel 파일이 닫힙니다.

import os

def close():

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

    except Exception:
        print("KU")

close()

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

반응형