Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Determine if string input could be a valid directory in Python

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!

like image 313
mlh3789 Avatar asked Jul 09 '13 21:07

mlh3789


People also ask

How do you check if a string is a valid directory in Python?

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.

How do you check if a directory contains a file Python?

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.

What is path () in Python?

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.


3 Answers

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))
like image 76
Chris Barker Avatar answered Oct 21 '22 08:10

Chris Barker


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 .

like image 41
Sajjan Singh Avatar answered Oct 21 '22 07:10

Sajjan Singh


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>
    ...
like image 33
howdoicode Avatar answered Oct 21 '22 06:10

howdoicode