python - 从 python 包中访问数据文件

标签 python audio package

我正在尝试根据用户输入的字符播放 wav 文件。 我的项目结构如下所示:

mypkg/
 |
 | mypkg/
    | 
    | __init__.py
    | code.py
    | sound/
        |
        | A.wav
        | B.wav
        | ...
 |
 | setup.py

我在setup.py中添加了以下内容:

package_dir={'mypkg': 'mypkg'},
package_data={'mypkg': ['sound/*.wav']}

我的code.py看起来像:

files = {
        'A': 'sound/A.wav',
        'B': 'sound/B.wav',
         ...
}
c = raw_input()
f = files.get(c, '?')
...playing the wave file code...

我知道 'A': 'sound/A.wav', 是错误的。问题是,如果我使用代码作为脚本,一切都会正常运行,但是如果我运行 setup.py 然后将其作为模块导入到控制台中,则会出现 IO 错误。具体来说: IOError:[Errno 2]没有这样的文件或目录:'sound/S.wav'

我知道我必须使用 pkgutil.get_data() 但如何才能将正确的路径添加到我的 files 字典中的文件。我的 code.py 应该是什么样子?

最佳答案

问题是,当您运行脚本时,该脚本的当前位置就是您运行它的位置,假设您使用 绝对路径 从完全不同的位置运行脚本,那么该脚本内的当前位置是您运行脚本时所在的位置,而不是脚本的位置。

对于您的示例,在 code.py 中,您需要获取该 python 文件的位置,然后在使用它之前将数据文件附加到该位置。

要获取正在运行的python文件的位置,您可以使用 __file__ ,或者更好的 - os.path.realpath(__file__) ,您需要了解__file__ 将给出文件的完整路径,以提取您必须使用的目录 - os.path.dirname()

那么你的代码看起来像 -

pt = os.path.dirname(os.path.realpath(__file__))
files = {
        'A': os.path.join(pt, 'sound/A.wav'),
        'B': os.path.join(pt, 'sound/B.wav'),
         ...
}

关于python - 从 python 包中访问数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30849669/

相关文章:

python - 重新分配唯一值 - pandas DataFrame

python - rdflib - 查询持久性存储

Python 发现没有使用 conda install 安装的名为 package 的模块

python - Python 3.3+ 中的包不需要 __init__.py

package - dpkg : how to ignore error in post/pre scripts

python - python oop 中的委托(delegate)

python - Lambda + Apply 在 Pandas 中获取两个新列

android - SuperpoweredAndroidAudioIO环回,只输出到左耳

c++ - 为什么我的 window 功能无法消除谐波?

html - Chrome在服务器上没有声音,但在客户端有