Python 获取仅包含文件名的文件夹的路径

Python 获取仅包含文件名的文件夹的路径,python,python-3.x,Python,Python 3.x,我正在创建游戏引擎,文件的结构如下: /Game game.py /PyEngine __init__.py main.py /dict __init__.py dict_entity.py dict_map.py etc /lib __init__.py entity.py

我正在创建游戏引擎,文件的结构如下:

/Game
    game.py
    /PyEngine
        __init__.py
        main.py
        /dict
            __init__.py
            dict_entity.py
            dict_map.py
            etc
        /lib
            __init__.py
            entity.py
            map.py
            etc
    /Graphics
        /entity
            /player
                /player_stand.png
                /player_run.png
                etc
现在,将模块导入到“game.py”或“main.py”很简单。。。问题是,例如,如果我希望将“entity_dict.py”导入“entity.py”,我应该怎么做?如果你想在“entity.py”中上传文件“player_stand.png”,我该怎么办?最重要的是,我希望“entity.py”得到“player_stand.png”的路径,该路径只有名称。这样,如果文件不存在(例如,它被错误删除),我可以将错误告知播放机。我在网上搜索了一下,但是我没有找到解决我问题的方法,所以我向你请教

问题是,例如,如果我希望将“entity_dict.py”导入“entity.py”,我应该怎么做

鉴于项目结构

/base
    main_script.py

    /parentpackage
        __init__.py

        /childpackage1
            __init__.py
            mod1.py

        /childpackage2
            __init__.py
            mod2.py
如果要从
mod2
导入
mod1
,有两个选项

使用相对导入

from ..childpackage1 import mod1
使用绝对进口

from parentpackage.childpackage1 import mod1
两者都会起作用

前者要求
parentpackage
是一个包(包括
\uuuu init\uuuu.py
文件),否则会出现如下错误:
ValueError:尝试在顶级包之外进行相对导入

后者没有这个限制,但是如果您重命名父包,您必须进入并更新所有导入(他们一开始并不真正关心
parentpackage
,只是使用它进入
childpackage1

因为在您的情况下,
parentpackage
是一个合适的包,所以首选第一个选项

最重要的是,我希望“entity.py”得到“player_stand.png”的路径,该路径只有名称

这更简单——您可以查看模块

编辑:

可以使用以下函数将文件名转换为绝对路径名

import os
import glob

GRAPHICS_PATH = <something>

def get_graphic_path(*parts):
    return os.path.join(GRAPHICS_PATH, *parts)

def find_graphic_path(filename):
    return glob.glob(os.path.join(GRAPHICS_PATH, '**', filename), recursive=True)
导入操作系统
导入glob
图形路径=
def get_图形路径(*部分):
返回os.path.join(图形路径,*部分)
def查找图形路径(文件名):
返回glob.glob(os.path.join(图形路径,'**',文件名),recursive=True)

如何定义
GRAPHICS\u PATH
取决于您自己,并且取决于很多事情。您可以将其硬编码为字符串(绝对或相对)。您可以使用
\uuuuuuuuu文件
sys.argv[0]
以及
os.path.join
os.path.dirname
的组合,相对于(a)这些函数出现在文件中的文件或(b)您的game.py脚本来定义它,分别。

要从
game.py
中获取
play_stand.png
os.path.join(os.path.basename(uu文件)、“Graphics”、“player”、“player_stand.png”)
不幸的是,我需要“entity.py”中的“player_stand.png”路径,这并不是很难:
os.path.join(os.path.basename(u文件)、.、.、.、.、.、.、.、,“player_stand.png”)
basename
s可能应该是
dirname
show glob是否有助于获得
player\u stand.png
?@MatthewStory OP正在已知目录的某个子目录中查找一个文件,仅按名称查找。这在我看来像是
glob
。为什么?OP知道目录、文件名并有权访问
\u文件ode>在与目标文件具有固定相对关系的模块中。
glob
与问题无关。可以使用
os.path.join(os.path.basename(\uuuu file\uuuuu)、“relative”、“path”、“to.png”)完成此操作
。如果您不喜欢
os
使用
pathlib
,但是
glob
是用于根据模式扩展路径。可能是我误读了它,或者OP不清楚,但得到的路径是“player\u stand.png”,只有名称听起来好像它们没有“固定的相对关系”“你的建议,国际海事组织。整个目录结构在问题中有明确的概述。