程序在创建文件之前检查文件是否存在

时间:2019-04-01 14:27:49

标签: python file time

我正在编写的代码有问题。其中一部分负责创建文件,还应该告诉我文件是否成功。如果不是,它也应该通知我,但问题是-它在创建文件之前检查文件是否存在。我试图通过使用时间模块(特别是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")

4 个答案:

答案 0 :(得分:1)

在创建屏幕快照之前已分配了这些变量(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')

答案 1 :(得分:0)

我不知道pyautogui.screenshot()会做什么,但是在这里:

假设每次尝试的前半部分是在调用打印机函数之前执行的,那么在创建要测试的文件之前,要存储os.path.isfile()的结果。

您还应该为文件夹名称选择一个大小写,实际上它应该在变量中,这样您就不必键入两次。您还应该使用os.path.join而不是键入目录分隔符。

在前半部分的打印机和打印机2中,您应该能够将存在/存在2更改为对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()

答案 2 :(得分:0)

欢迎您!

最好检查文件是否存在使用<div class="container-fluid"> <h1 class="mt-4">Liste des contracteurs</h1> <div class="table-responsive"> <table id="contracteur_data" class="table table-striped table-bordered"> <thead> <tr> <td># Contracteur</td> <td>Description</td> <td>Options</td> </tr> </thead> <?php while($row = $SelectContracteurs_Query->fetch()) { echo ' <tr> <td>'.$row["idContracteur"].'</td> <td>'.$row["Description"].'</td> <td><a href="ContracteurEdit.php?id=' .$row["idContracteur"]. '"><button type="button" class="btn btn-primary">Modifier</button></a></td> </tr> '; } ?> </table> </div> </div> 块。代码中的问题是它们是第try/catch行和os.path.isfile('.\screenshot.png')行之间的竞争条件部分。

您可以尝试使用以下-

if exists

答案 3 :(得分:0)

感谢您的所有回答。通过使用Zonyl提出的解决方案,我能够解决我的问题。看起来背后的原因是琐碎的(,,这些变量(文件1,文件2)在创建屏幕快照之前已分配” ,,假设每次尝试的前一半是在调用打印机函数之前执行的,则存储os.path.isfile()的结果,然后再创建要测试的文件。”)但我很感谢您仍然帮助了我。我希望以后再有新手会觉得有用。