Pythonic way to check if a file exists?

This question already has an answer here:

  • How to check whether a file exists? 39 answers

  • To check if a path is an existing file:

    os.path.isfile(path)

    Return True if path is an existing regular file. This follows symbolic links, so both islink() and isfile() can be true for the same path.


    Instead of os.path.isfile , suggested by others, I suggest using os.path.exists , which checks for anything with that name, not just whether it is a regular file.

    Thus:

    if not os.path.exists(filename):
        file(filename, 'w').close()
    

    Alternatively:

    file(filename, 'w+').close()
    

    The latter will create the file if it exists, but not otherwise. It will, however, fail if the file exists, but you don't have permission to write to it. That's why I prefer the first solution.


    It seems to me that all other answers here (so far) fail to address the race-condition that occurs with their proposed solutions.

    Any code where you first check for the files existence, and then, a few lines later in your program, you create it, runs the risk of the file being created while you weren't looking and causing you problems (or you causing the owner of "that other file" problems).

    If you want to avoid this sort of thing, I would suggest something like the following (untested):

    import os
    
    def open_if_not_exists(filename):
        try:
            fd = os.open(filename, os.O_CREAT | os.O_EXCL | os.O_WRONLY)
        except OSError, e:
            if e.errno == 17:
                print e
                return None
            else:
                raise
        else:
            return os.fdopen(fd, 'w')
    

    This should open your file for writing if it doesn't exist already, and return a file-object. If it does exists, it will print "Ooops" and return None (untested, and based solely on reading the python documentation, so might not be 100% correct).

    链接地址: http://www.djcxy.com/p/7298.html

    上一篇: Python if语句错误处理

    下一篇: Pythonic的方式来检查文件是否存在?