Skip to content Skip to sidebar Skip to footer

Relative Address In Python

Referring to the question here Relative paths in Python. I have similar problem to that. My project structure: proj | |--config | |--ENV | |--folder1 | |--UI | |

Solution 1:

My Project
    some_file.py
    Resources
        bg.png
        music.mp3
    Folder
        another_file.py

If you want to access your resources from some_file.py, the relative path would be ./Resources/... but if you want to use resources from another_file.py you would do ../Resources/....

So in your case if you want to access ENV file from test1.py, its relative location would be ./config/ENV, but if you want to access it from test2.py, its relative location would be ../../config/ENV.

Remember../ means going up one level and ./ means the same level.

Edits: Here you've the fixed path config/ENV. Passing that fixed path in relative_path() gives you the relative path address.

# proj#   config#     ENV##   folder1#     config#       some_other_file.txt##     UI#       test2.py# #   test1.pyimport os

defrelative_path(path):
    # Get the parent directory of the# file that you need the relative# path for.
    my_dir = path.split('/')[0]
    
    # Recursively match the directory# in the given path. if the match# not found go up one level.defmatch_dir(c_path):
        c_path = os.path.split(c_path)[0]
        
        if my_dir in os.listdir(c_path) and (
            os.path.isfile(
                os.path.join(c_path, path)
            )
        ):
            # this whole if-block can be omitted# if the folder you're trying to access# is on the same level, this just prepends# with './'. I added this just for# aesthetic reason.if os.path.basename(__file__) in os.listdir(c_path):
                return'./' + path
                
            return path
            
        return"../" + match_dir(c_path)
    
    
    return match_dir(
        os.path.realpath(__file__)
    )


# Getting relative path from test2.pyprint(relative_path("config/ENV"))
print(relative_path("config/some_other_file.txt"))

# Try running this from test1.pyprint(relative_path("config/ENV")) # './config/ENV'

This isn't very much optimized. Just a general idea.

Post a Comment for "Relative Address In Python"