Python Forum
check if file exists. - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: check if file exists. (/thread-3992.html)



check if file exists. - ian - Jul-14-2017

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'):


RE: check if file exists. - ichabod801 - Jul-14-2017

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.


RE: check if file exists. - ian - Jul-14-2017

Thank you. the problem is that I used If not if.


RE: check if file exists. - DeaD_EyE - Jul-14-2017

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)



RE: check if file exists. - snippsat - Jul-14-2017

(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'



RE: check if file exists. - ichabod801 - Jul-14-2017

(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.


RE: check if file exists. - wavic - Jul-15-2017

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.