How to check whether a file exists in Python
Skills:
Python for Data80%
Key Takeaways
The video discusses how to check if a file exists in Python, highlighting the issues with traditional methods and recommending to simply try to open the file instead, using os.path and pathlib modules for more robust and ergonomic path handling.
Full Transcript
how should you check whether or not a file or directory exists in Python this is one of those things that's confusing mostly because python offers several different ways to do it so which one should you use I've seen many beginners follow a path like this first they check to see if the path exists using something like os. path. exists print something in return if it doesn't and then proceed to open the file and do something with the data if it does and in most situations although this does have some problems let's be honest it's probably fine for small personal scripts and other things like that I probably wouldn't even worry about it but if your intention is to build something just a little bit more robust then let's take a look at some of the issues the first issue is that time passes between when we check to see if the file exists and when we try to open it it's possible that another thread or some external process deleted the file between when we check whether it exists and when we tried to open it if that were to happen this open call would raise an exception specifically a F not found error which is something you might like to catch so really we need to basically repeat our error handling code okay so we surround it in a try accept but wait if open was going to throw if the file didn't exist then why did we need to check that it exists in the first place and that's my point checking whether it exists or not is basically redundant if you're going to open the file immediately after checking whether it exists instead just try to open it it either exists and opened successfully or you get an exception when you do it this way the operating system will prevent other processes from deleting the file out from under you as long as you have it open in Python although it typically will not prevent the same process from deleting it out from under itself it's also still possible that other threads or processes read or write to the file in between when you open it and when you read it so there are still things you need to worry about just a few less of them another advantage of this approach is that there are other things that can go wrong when you try to open a file besides the file not being found for instance you might get an is a directory error if you tried to open a directory instead of a file you could use the OS path function to check if something's a directory but once again you'd end up with a potential very subtle bug if whether it's a directory not changes in between when you ask the question and when you actually try to open the file so if you're checking whether the file exists because you want to open it then don't just try to open it and catch whatever errors you get and if you want to be super modern you even consider using path Li read text as a quick oneliner to get all the data out but sometimes you don't want to actually open the file you really do just want to know whether or not it exists you could be using the existence of a file as a Boolean checking whether an old temp file exists or checking if the user made a configuration directory in that case the recommended way to check whether or not a file or directory exists depends on whether you really need strings or whether you could do with pathlib path objects many applications default to Strings because it seems like the easiest choice and in a lot of cases it is if that's you then OS path exists might be what you want hopefully unsurprisingly it tells you whether or not the file exists exist will return true for files and directories and it also follows symbolic links in particular exists will return false For a symbolic link that points to a file that doesn't exist so even if there is an actual file the symbolic link at this location it would still return false it does sound a bit confusing but this is the behavior that you would usually want if you want to check that you got an actual file and not a directory or some kind of device object then you want is file instead once again is file follows links and this is probably what you want even though it sounds a little confusing and you guessed it for directories there's iser and it also follows symbolic links so that's all fine and dandy and it works but using strings to represent paths can be kind of error prone instead using path lb. path can provide a more ergonomic and safer interface if you already have a string you can convert to a path very easily like this or you can do it like this if you're constructing from scratch paths provide a wrapper around a lot of the os. paath functionality and they make it easy to access through method calls for instance path. exists we'll use os. path. exists path. is file we'll use os. paath do is file and similarly for isur and number of other os. paath functions if you're already using strings all over the place of course there's a bit of overhead to convert but once you do pretty much every built-in function that takes a string path also takes a pathlib path and importantly path. path takes care of a lot of idiosyncrasies that might come up if you were to switch operating systems things like using forward slashes on Linux but backs slashes on Windows oh and pathlib actually follows pep eight
Original Description
Don't check, just open it.
How should you check whether a file exists in Python before opening it?
― mCoding with James Murphy (https://mcoding.io)
Source code: https://github.com/mCodingLLC/VideosSampleCode
os.path: https://docs.python.org/3/library/os.path.html
pathlib: https://docs.python.org/3/library/pathlib.html
SUPPORT ME ⭐
---------------------------------------------------
Sign up on Patreon to get your donor role and early access to videos!
https://patreon.com/mCoding
Feeling generous but don't have a Patreon? Donate via PayPal! (No sign up needed.)
https://www.paypal.com/donate/?hosted_button_id=VJY5SLZ8BJHEE
Want to donate crypto? Check out the rest of my supported donations on my website!
https://mcoding.io/donate
Top patrons and donors: Jameson, Laura M, Dragos C, Vahnekie, Neel R, Matt R, Johan A, Casey G, Mark M, Mutual Information, Pi
BE ACTIVE IN MY COMMUNITY 😄
---------------------------------------------------
Discord: https://discord.gg/Ye9yJtZQuN
Github: https://github.com/mCodingLLC/
Reddit: https://www.reddit.com/r/mCoding/
Facebook: https://www.facebook.com/james.mcoding
Watch on YouTube ↗
(saves to browser)
Sign in to unlock AI tutor explanation · ⚡30
Playlist
Uploads from mCoding · mCoding · 0 of 60
← Previous
Next →
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
Goodbye, List! Type hinting standard collections - New in Python 3.9
mCoding
Python's comma equals ,= operator?
mCoding
Finding Primes in Python with the Sieve of Eratosthenes
mCoding
Find the First Missing Positive Int | Hard Interview Question on LeetCode
mCoding
JSON Tutorial Python | Basic Python Recipes
mCoding
Simulating Brownian Motion in Python
mCoding
The Single Most Useful Decorator in Python
mCoding
The Fastest Way to Loop in Python - An Unfortunate Truth
mCoding
Numpy Array Broadcasting In Python Explained
mCoding
Brownian Motion Single Path Zoom
mCoding
Brownian Motion Fractal Zoom
mCoding
Magic Methods - Making Python builtins work with your classes
mCoding
50 Million Primes In 5 Seconds - Segmented Sieve of Eratosthenes
mCoding
The Hottest New Feature Coming In Python 3.10 - Structural Pattern Matching / Match Statement
mCoding
How Fast is Python's Sort? Performance Testing
mCoding
C++ First Missing Int, faster than 100%!
mCoding
[April Fools 2021] Python 4.0! New old print, mandatory static typing, StackOverflow integration
mCoding
Python dataclasses will save you HOURS, also featuring attrs
mCoding
C++ Sudoku Solver in 7 minutes using Recursive Backtracking
mCoding
Every PROOF you've seen that .999... = 1 is WRONG
mCoding
Python's sharpest corner is ... plus equals? (+=)
mCoding
Binary Search - A Different Perspective | Python Algorithms
mCoding
The Best Way to Check for Optional Arguments in Python
mCoding
Local and Global Variable Lookup Weirdness in Python
mCoding
Efficient Exponentiation
mCoding
How To Install Python for Data Science
mCoding
0.1 + 0.2 is NOT 0.3 in Most Programming Languages
mCoding
Python 3.10's new type hinting features
mCoding
Python 3.10's Quality of Life improvements
mCoding
Introducing mZips! Python Zip and Zip Longest
mCoding
Match statement tips
mCoding
Using except: is a HUGE mistake
mCoding
Python + YouTube API | Automating descriptions
mCoding
Anaphones, phonetic anagrams
mCoding
Cracking passwords using ONLY response times | Secure Python
mCoding
Python f-strings can do more than you thought. f'{val=}', f'{val!r}', f'{dt:%Y-%m-%d}'
mCoding
Diagnose slow Python code. (Feat. async/await)
mCoding
Python MD5 implementation
mCoding
Salting, peppering, and hashing passwords
mCoding
x to bool conversion in Python, C++, and C
mCoding
You should put this in all your Python scripts | if __name__ == '__main__': ...
mCoding
Find the Skyline Problem with C++ Solution Explained
mCoding
The ONLY C keyword with no C++ equivalent
mCoding
Should you use "not not x" instead of "bool(x)" in Python? (NO!)
mCoding
Multiple Assignments in Python
mCoding
Why I don't like Python's chained comparisons
mCoding
Automated Testing in Python with pytest, tox, and GitHub Actions
mCoding
You can pip install directly from GitHub
mCoding
__new__ vs __init__ in Python
mCoding
Metaclasses in Python
mCoding
The easy way to keep your repos tidy.
mCoding
Which Python @dataclass is best? Feat. Pydantic, NamedTuple, attrs...
mCoding
Python __slots__ and object layout explained
mCoding
C++ cache locality and branch predictability
mCoding
Avoiding import loops in Python
mCoding
25 nooby Python habits you need to ditch
mCoding
Python staticmethod and classmethod
mCoding
Building a Python app with Anvil to email me if my website goes down (includes paid features)
mCoding
31 nooby C++ habits you need to ditch
mCoding
Interviewing the creator of C++, Bjarne Stroustrup
mCoding
More on: Python for Data
View skill →Related AI Lessons
⚡
⚡
⚡
⚡
Understanding the Limits of Linear RAG — and Why Agentic Workflows Are Catching On
Medium · AI
Understanding the Limits of Linear RAG — and Why Agentic Workflows Are Catching On
Medium · Machine Learning
Understanding the Limits of Linear RAG — and Why Agentic Workflows Are Catching On
Medium · Data Science
Why you shouldn’t search your documents directly with AI
Medium · Programming
🎓
Tutor Explanation
DeepCamp AI