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
'programing' 카테고리의 다른 글
Python 사전에서 URL 매개 변수 (0) | 2023.06.20 |
---|---|
Excel에서 SQL Server로 데이터 가져오기 중 일부 데이터 가져오기 실패 (0) | 2023.06.20 |
Visual Studio 2012의 웹 사이트 관리 도구 위치 (0) | 2023.06.20 |
c#에서 iCal 파일 만들기 (0) | 2023.06.20 |
Git 원격 오리진 설정 (0) | 2023.06.20 |