Python Forum

Full Version: check if file exists.
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I try the following to check if a file exists but when run them, os is highlighted and popup 'invalid syntax' window. not sure why. please advice. thanks.
I use python 3.6.1 on windows 10.

import os

if os.path.exists('test.cvs'):
if os.path.isfile('test.cvs'):
if os.path.islink('test.cvs'):
Do you try them all in a row like you've shown (and please check out the BBCode link in my signature for info on posting code)? That will cause an IndentationError.

If you are getting a syntax error, I expect you have an unclosed bracket, brace, or parenthesis on the previous line.
Thank you. the problem is that I used If not if.
Don't ask for permission ask for forgiveness.

Instead of checking every possible possibility, you should use try: except:


import sys


filename = 'not_existing_file'

try:
    fd = open(filename)
except OSError as e:
    print(e, file=sys.stderr)
    sys.exit(1)
Or you can be more concrete:

filename = '/dev/mem'

try:
    fd = open(filename)
except PermissionError as e:
    print('You don\'t have the permission to open the file {}'.format(filename), file=sys.stderr)
    sys.exit(1)
except OSError as e:
    # PermissionError is a subclass of OSError
    # First you should be very concrete, and later
    # you can catch all other Errors
    # NEVER USE except:
    # this will catch all Errors
    print(e, file=sys.stderr)
    sys.exit(2)
(Jul-14-2017, 08:22 PM)DeaD_EyE Wrote: [ -> ]Instead of checking every possible possibility, you should use try: except:
I agree with this.
There is a couple of thing that can be done different.
No need to import sys and use file=sys.stderr,just print error give the same.
and use with open().
>>> try:
...     with open('ll.txt') as f:
...         f.read()
... except OSError as error:
...     print(error)
[Errno 2] No such file or directory: 'll.txt'

>>> import sys
>>> try:
...     with open('ll.txt') as f:
...         f.read()
... except OSError as e:
...     print(e, file=sys.stderr)
[Errno 2] No such file or directory: 'll.txt'
(Jul-14-2017, 08:22 PM)DeaD_EyE Wrote: [ -> ]Instead of checking every possible possibility, you should use try: except:

I don't think this should be taken as a hard and fast rule. The try statement is more efficient if you don't have an error, the if statement is more efficient if you do have an error. If the file is likely to be there you should use try, if it is likely to not be there you should use if.
If you have to check the file in subfolders too try/except or if statements are not efficient. Both Windows and Linux are using some kind of indexing/database_like so when you ask for a file you get its location in a matter of seconds. 'find' command in Linux does not index or keep info about anything. It's slow too. 'locate' does. If this is the case it's better to use subprocess module.