在Python中,如何获取位于模块内文件目录的路径

提姆

我创建了一个名为“播放器”的模块,该模块具有wav文件的子目录:

user/repositories/python_packages/playr/
|
|--__init__.py
|--sounds/
|   |--sound1.wav
|   |--sound2.wav
|   |--sound3.wav

在我__init__.py的函数中,应获取目录中所有文件的列表sounds/以播放选定的声音:

from os import listdir
import os.path
import subprocess

def play(sound=0):
    wav_files = listdir('sounds')
    sound_file = os.path.join('sounds', wav_files[sound])
    return_code = subprocess.call(['afplay', sound_file])

因为我想共享这个模块,所以我需要找到一种方法来获取sounds/目录的路径,而无需对绝对路径进行硬编码父目录user/repositories/python_packages/包含在我的PYTHONPATH变量中。

当前,当我尝试从其他目录中的python env使用该模块时,它看起来像这样:

from playr import play

play()


----------------------------------------------------------------
FileNotFoundError: [Errno 2] No such file or directory: 'sounds'

我知道它找不到sounds/目录,因为它是在当前环境中而不是在模块中。我的问题是如何让我的功能在模块中而不是当前环境中查看

到目前为止,我已经尝试了使用os.path和的许多不同方法pathlib我也尝试了不同的使用方式module.__file__

任何帮助将不胜感激!

提姆

python 3.7+中的解决方案是importlib.resources,或者importlib_resources<3.7的反向端口

# py 3.7

import os, subprocess
from importlib.resources import path

def play(sound=0):
    with path('playr', 'sounds') as sounds_path:
        sounds = os.listdir(sounds_path)
        audio_file = os.path.join(sounds_path, sounds[sound])
        return_code = subprocess.call(['afplay', audio_file])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何获取JavaScript数组中特定目录内文件的所有路径

如何获取位于 src/main/resources 中的 .exe 文件的路径

获取Python中绝对文件路径的目录路径

如何获取子目录中包含特定目录字符串的子目录中python文件的路径

如何在Windows Batch / Python文件中获取当前目录的路径?

如何从 Python 中的目录中获取文件?

如何从ansibles查找模块中获取文件路径

如何从C中的完整路径获取文件目录

包括模块,除非期望文件位于某个目录中?

找不到目录文件夹内文件夹中的python文本文件

计算Python模块分发中的目录路径

如何在Python中获取%APPDATA%目录的路径?

如何在python中获取父目录的路径

如何使用位于父目录中的eslint插件模块?

如何从文件的完整路径获取目录?

从Java中的文件路径获取目录(android)

如何从Java中的路径获取目录和子目录中的文件数?

如何从CSV(PYTHON)的列中查找目录中文件的路径

资源路径返回nil文件路径,尽管文件位于Documents目录中

java-如何在MySQL中获取文件路径并从目录获取后续文件?

如何列出目录中的文件在内部Web模块类路径

无法从其他路径导入位于根目录下的Python模块

OCaml:如何获取*当前模块* /项目目录的路径?

Python。如何从JSON获取目录路径?

如何使用react-native和expo获取位于assets文件夹中的文件的绝对路径?

如何导入位于pycharm项目中相同子目录中的python文件

如何指定drupal邮件保存文件模块的目录路径?

如何在模块的另一个文件的文件中获取路径?

如何获取位于node.js中$ PATH中的可执行文件的完整路径?