[英]How to make sure a file exists or can be created before writing to it in Python?
[英]Program checks if file exists before it is created
我正在編寫的代碼有問題。 其中一部分負責創建文件,還應該告訴我文件是否成功。 如果不是,它也應該通知我,但問題是-它在創建文件之前檢查文件是否存在。 我試圖通過使用時間模塊(特別是time.sleep選項,幾乎可以在所有位置插入)在文件創建和檢查文件是否存在之間進行休息,但是沒有結果。 我還嘗試使用另一種方法來檢查文件是否存在。 它沒有幫助。 整個程序工作正常(不包括此部分),因為如果文件已經存在並且我告訴程序創建它,它會告訴我它已成功,因此可以正確讀取它,但是速度太快。 我在下面附加了部分代碼。 先感謝您。
我嘗試的第一種方式,使用os模塊:
path = 'D:\screen'
os.chdir(path)
exists = os.path.isfile('.\screenshot.png')
exists2 = os.path.isfile('.\screenshot2.png')
這是執行部分:
def printer():
pyautogui.screenshot('D:\SCREEN\screenshot.png')
time.sleep(3)
if exists:
print("Screenshot was created successfully")
else:
print("Screenshot was not created successfully")
def printer2():
pyautogui.screenshot('D:\SCREEN\screenshot2.png')
time.sleep(3)
if exists2:
print ("Screenshot was created successfully")
else:
print ("Screenshot was not created successfully")
我嘗試的第二種方式,使用pathlib:
path = 'D:/screen'
file1 = Path("D:/screen/screenshot.png")
file2 = Path("D:/screen/screenshot2.png")
和執行部分:
def printer():
pyautogui.screenshot('D:/SCREEN/screenshot.png')
time.sleep(3)
if file1.isfile():
print("Screenshot was created successfully")
else:
print("Screenshot was not created successfully")
def printer2():
pyautogui.screenshot('D:/SCREEN/screenshot2.png')
time.sleep(3)
if file2.isfile():
print("Screenshot was created successfully")
else:
print("Screenshot was not created successfully")
這些變量( file1
, file2
)是在創建屏幕快照之前分配的,因此它們不存在。 screenshot
實際上返回了一個PIL圖像對象。 因此,即使不使用os
也可以檢查是否。
def printscreen():
try:
image = pyautogui.screenshot('D:/SCREEN/screenshot.png')
except Exception as e:
print(f'Exception occured during screenshotring {str(e)}')
如果您仍要與os檢查是否存在,請在屏幕截圖之后使用它。
pyautogui.screenshot('D:/SCREEN/screenshot.png')
assert os.file.exist('D:/SCREEN/screenshot.png')
我不知道pyautogui.screenshot()是做什么的,但是這里是:
假設每次嘗試的前半部分是在調用打印機函數之前執行的,那么在創建要測試的文件之前,要存儲os.path.isfile()的結果。
您還應該為文件夾名稱選擇一個大小寫,實際上它應該在變量中,這樣您就不必鍵入兩次。 您還應該使用os.path.join而不是鍵入目錄分隔符。
在上半年的Printer和Printer2中,您應該能夠將exist / exists2更改為對os.path.isfile()的調用。
在簡單的情況下,這應該起作用:
def printer():
pyautogui.screenshot('D:\screen\screenshot.png') #assume this attempts to create a file
if os.path.isfile('.\screenshot.png'):
print("Screenshot was created successfully")
else:
print("Screenshot was not created successfully")
path = 'D:\screen'
os.chdir(path)
printer()
歡迎來到SO!
檢查文件是否存在的最佳方法是使用try/catch
塊。代碼中的問題是它們是os.path.isfile('.\\screenshot.png')
和if exists
之間的競爭條件os.path.isfile('.\\screenshot.png')
if exists
一部分。
您可以嘗試使用以下內容-
try:
fh = open('.\screenshot.png', 'rw'):
# Do something
except FileNotFoundError:
print("File not found")
感謝您的所有回答。 通過使用Zonyl提出的解決方案,我能夠解決我的問題。 看起來背后的原因是瑣碎的(,,這些變量(文件1,文件2)在創建屏幕快照之前已分配” ,,假設每次嘗試的前一半是在調用打印機函數之前執行的,則存儲os.path.isfile()的結果,然后再創建要測試的文件。”)但我很感謝您仍然幫助了我。 我希望以后再有新手會覺得有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.