簡體   English   中英

程序在創建文件之前檢查文件是否存在

[英]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")

這些變量( file1file2 )是在創建屏幕快照之前分配的,因此它們不存在。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM