【问题标题】:Get resource from python resource root从 python 资源根目录获取资源
【发布时间】:2019-03-02 12:30:11
【问题描述】:

我正在使用 PyCharm IDE。我将一个文件夹标记为资源根目录,并想从其目录中获取一个文件,并且想知道这样做的适当方法。

在 Java 中,您可以使用 getClass().getResource("/resourceName.extension")

有没有办法以上述方式从 python 获取路径?

【问题讨论】:

    标签: python python-3.x resources relativesource


    【解决方案1】:

    根据您所说的,听起来您只需要使用简单的包含语句来包含文件的目录。

    例如,如果您的文件是这样设置的:

    c:program\main
    c:program\resources
    

    那么你可以做一个简单的

    import resources
    

    但是,如果您有任何子包,则可能会遇到耦合问题。我在下面链接的另一个线程中更详细地讨论了解决涉及资源的耦合问题。

    Managing resources in a Python project

    【讨论】:

    • 使用import导入目录后,获取文件时如何引用?例如,我需要从资源中获取一个名为 music.wav 的音频文件。我将如何获得它?
    • 您的程序中是否使用了特定的库?例如,我通常使用pygame 制作游戏,并将声音设置为sound = pygame.mixer.Sound("file") 我在pygame 之外做了一些研究。我找到了这份文件,希望它能帮到你。 docs.python.org/2/library/wave.html
    • 我正在使用 pyaudio。我实际上是在使用 wave 来接收文件。我只是想知道您是否可以指定包和文件名或根据资源根目录执行某种相对路径,而不是使用绝对路径或执行类似 ../audio/music.wav 之类的操作。
    • 在我的程序中,我倾向于使用相对路径,例如在我的一个游戏中,我的文件设置为game/Interface/file.pygame/Resources/Sounds,而我只是这样做self.sound = pygame.mixer.Sound("..\Resources\Sounds\Letters\Y.ogg") 我没有使用 pyaudio 但我相信同样的概念应该适用。 pyaudio 的文档应该有这方面的文档。
    • 在我的情况下,我也可以使用相对目录,但重点是尝试使用与目录无关的方式来获取文件。基本上,我不希望它成为绝对路径,因此无论项目放在哪里,它都可以在其他人的计算机上运行。但我不希望它是像 ../audio/music.wav 这样的简单相对路径,因为如果文件从目录中的不同路径运行,它将失败。例如,如果文件是从项目目录(例如 python3 package/runner.py)执行而不是从包目录(python3 runner.py)运行,它将失败。
    【解决方案2】:

    我想要的可以通过this answer来完成。

    我使用的代码如下:

    os.path.join(os.path.dirname(__file__), '../audio/music.wav'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      • 2011-04-24
      相关资源
      最近更新 更多