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”,只有名称听起来好像它们没有“固定的相对关系”“你的建议,国际海事组织。整个目录结构在问题中有明确的概述。