How do I check whether a file exists without exceptions?

后端 未结 30 1851
北海茫月
北海茫月 2020-11-21 05:07

How do I check if a file exists or not, without using the try statement?

相关标签:
30条回答
  • 2020-11-21 05:27

    This is the simplest way to check if a file exists. Just because the file existed when you checked doesn't guarantee that it will be there when you need to open it.

    import os
    fname = "foo.txt"
    if os.path.isfile(fname):
        print("file does exist at this time")
    else:
        print("no such file exists at this time")
    
    0 讨论(0)
  • 2020-11-21 05:27
    import os
    #Your path here e.g. "C:\Program Files\text.txt"
    #For access purposes: "C:\\Program Files\\text.txt"
    if os.path.exists("C:\..."):   
        print "File found!"
    else:
        print "File not found!"
    

    Importing os makes it easier to navigate and perform standard actions with your operating system.

    For reference also see How to check whether a file exists using Python?

    If you need high-level operations, use shutil.

    0 讨论(0)
  • 2020-11-21 05:27

    Testing for files and folders with os.path.isfile(), os.path.isdir() and os.path.exists()

    Assuming that the "path" is a valid path, this table shows what is returned by each function for files and folders:

    You can also test if a file is a certain type of file using os.path.splitext() to get the extension (if you don't already know it)

    >>> import os
    >>> path = "path to a word document"
    >>> os.path.isfile(path)
    True
    >>> os.path.splitext(path)[1] == ".docx" # test if the extension is .docx
    True
    
    0 讨论(0)
  • 2020-11-21 05:28

    Unlike isfile(), exists() will return True for directories. So depending on if you want only plain files or also directories, you'll use isfile() or exists(). Here is some simple REPL output:

    >>> os.path.isfile("/etc/password.txt")
    True
    >>> os.path.isfile("/etc")
    False
    >>> os.path.isfile("/does/not/exist")
    False
    >>> os.path.exists("/etc/password.txt")
    True
    >>> os.path.exists("/etc")
    True
    >>> os.path.exists("/does/not/exist")
    False
    
    0 讨论(0)
  • 2020-11-21 05:28

    Python 3.4+ has an object-oriented path module: pathlib. Using this new module, you can check whether a file exists like this:

    import pathlib
    p = pathlib.Path('path/to/file')
    if p.is_file():  # or p.is_dir() to see if it is a directory
        # do stuff
    

    You can (and usually should) still use a try/except block when opening files:

    try:
        with p.open() as f:
            # do awesome stuff
    except OSError:
        print('Well darn.')
    

    The pathlib module has lots of cool stuff in it: convenient globbing, checking file's owner, easier path joining, etc. It's worth checking out. If you're on an older Python (version 2.6 or later), you can still install pathlib with pip:

    # installs pathlib2 on older Python versions
    # the original third-party module, pathlib, is no longer maintained.
    pip install pathlib2
    

    Then import it as follows:

    # Older Python versions
    import pathlib2 as pathlib
    
    0 讨论(0)
  • 2020-11-21 05:29

    Although I always recommend using try and except statements, here are a few possibilities for you (my personal favourite is using os.access):

    1. Try opening the file:

      Opening the file will always verify the existence of the file. You can make a function just like so:

      def File_Existence(filepath):
          f = open(filepath)
          return True
      

      If it's False, it will stop execution with an unhanded IOError or OSError in later versions of Python. To catch the exception, you have to use a try except clause. Of course, you can always use a try except` statement like so (thanks to hsandt for making me think):

      def File_Existence(filepath):
          try:
              f = open(filepath)
          except IOError, OSError: # Note OSError is for later versions of Python
              return False
      
          return True
      
    2. Use os.path.exists(path):

      This will check the existence of what you specify. However, it checks for files and directories so beware about how you use it.

      import os.path
      >>> os.path.exists("this/is/a/directory")
      True
      >>> os.path.exists("this/is/a/file.txt")
      True
      >>> os.path.exists("not/a/directory")
      False
      
    3. Use os.access(path, mode):

      This will check whether you have access to the file. It will check for permissions. Based on the os.py documentation, typing in os.F_OK, it will check the existence of the path. However, using this will create a security hole, as someone can attack your file using the time between checking the permissions and opening the file. You should instead go directly to opening the file instead of checking its permissions. (EAFP vs LBYP). If you're not going to open the file afterwards, and only checking its existence, then you can use this.

      Anyway, here:

      >>> import os
      >>> os.access("/is/a/file.txt", os.F_OK)
      True
      

    I should also mention that there are two ways that you will not be able to verify the existence of a file. Either the issue will be permission denied or no such file or directory. If you catch an IOError, set the IOError as e (like my first option), and then type in print(e.args) so that you can hopefully determine your issue. I hope it helps! :)

    0 讨论(0)
提交回复
热议问题