首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >获取仅包含文件名的文件夹的路径

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

Stack Overflow用户
提问于 2018-07-02 04:02:08
回答 1查看 59关注 0票数 0

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

代码语言:javascript
复制
/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”的路径,只有这个名称。通过这种方式,如果文件不存在(例如,它被错误删除),我可以将错误通知给播放器。我在网上搜索了一下,但没有找到接近我的问题的解决方案,所以我向你请教。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-02 04:18:04

问题是,例如,如果我希望将"entity_dict.py“导入到"entity.py”中,我应该怎么办?

给定项目结构

代码语言:javascript
复制
/base
    main_script.py

    /parentpackage
        __init__.py

        /childpackage1
            __init__.py
            mod1.py

        /childpackage2
            __init__.py
            mod2.py

如果您想从mod2导入mod1,您有两个选择。

使用相对导入

代码语言:javascript
复制
from ..childpackage1 import mod1

使用绝对导入

代码语言:javascript
复制
from parentpackage.childpackage1 import mod1

两者都会起作用。

前者要求parentpackage是一个包(包括一个__init__.py文件),否则您将得到一个类似于:ValueError: attempted relative import beyond top-level package的错误。

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

由于在您的示例中,parentpackage是一个合适的包,因此首选第一个选项。

最重要的是,我希望"entity.py“获得"player_stand.png”的路径,只有一个名字。

这更简单--您可以查看glob模块。

编辑:

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

代码语言:javascript
复制
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)

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51126623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档