I am writing boilerplate that handles command line arguments that will later be passed to another function. This other function will handle all of the directory creation (if necessary). Therefore my bp only needs to check if an input string could be a valid directory, OR a valid file, OR (some other thing). i.e. it needs to differentiate between something like "c:/users/username/" and "c:/users/username/img.jpg"
def check_names(infile):
#this will not work, because infile might not exist yet
import os
if os.path.isdir(infile):
<do stuff>
elif os.path.isfile(infile):
<do stuff>
...
The standard library does not appear to offer any solutions, but the ideal would be:
def check_names(infile):
if os.path.has_valid_dir_syntax(infile):
<do stuff>
elif os.path.has_valid_file_syntax(infile):
<do stuff>
...
After thinking about the question while typing it up, I can't fathom a way to check (only based on syntax) whether a string contains a file or directory other than the file extension and trailing slash (both of which may not be there). May have just answered my own question, but if anyone has thoughts about my ramblings please post. Thank you!
isdir() Method to check if file exists. os. path. isdir() method in Python is used to check whether the specified path is an existing directory or not.
In Python, you can check whether certain files or directories exist using the isfile() and isdir() methods, respectively. However, if you use isfile() to check if a certain directory exists, the method will return False. Likewise, if you use if isdir() to check whether a certain file exists, the method returns False.
path module is a very extensively used module that is handy when processing files from different places in the system. It is used for different purposes such as for merging, normalizing and retrieving path names in python . All of these functions accept either only bytes or only string objects as their parameters.
I don't know what OS you're using, but the problem with this is that, on Unix at least, you can have files with no extension. So ~/foo
could be either a file or a directory.
I think the closest thing you could get is this:
def check_names(path):
if not os.path.exists(os.path.dirname(path)):
os.makedirs(os.path.dirname(path))
Unless I'm misunderstanding, os.path
does have the tools you need.
def check_names(infile):
if os.path.isdir(infile):
<do stuff>
elif os.path.exists(infile):
<do stuff>
...
These functions take in the path as a string, which I believe is what you want. See os.path.isdir
and os.path.exists
.
Yes, I did misunderstand. Have a look at this post .
New since Python 3.4, you could also use pathlib module:
def check_names(infile):
from pathlib import Path
if Path(infile).exists(): # This determines if the string input is a valid path
if Path(infile).is_dir():
<do stuff>
elif Path(infile).is_file():
<do stuff>
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With