我正在构建一个简单的工作助手脚本,该脚本会将代码库中的几个模板文件复制到当前目录。但是,我没有存储模板的目录的绝对路径。我确实有一个来自脚本的相对路径,但是当我调用该脚本时,会将其视为相对于当前工作目录的路径。有没有一种方法可以指定此相对URL来自脚本的位置?
在具有脚本的文件中,你想要执行以下操作:
import os
dirname = os.path.dirname(__file__)
filename = os.path.join(dirname, 'relative/path/to/file/you/want')
这将为你提供要查找的文件的绝对路径。请注意,如果你使用的是setuptools
,则应该改用其包资源API。
更新:我在这里回应评论,所以我可以粘贴代码示例。:-)
我是否认为__file__
并非总是可用(例如,当你直接运行文件而不是导入文件时)?
__main__
当你提到直接运行文件时,我假设你的意思是脚本。如果是这样,在我的系统上似乎不是这种情况(在OS X 10.5.7上为python 2.5.1):
#foo.py
import os
print os.getcwd()
print __file__
#in the interactive interpreter
>>> import foo
/Users/jason
foo.py
#and finally, at the shell:
~ % python foo.py
/Users/jason
foo.py
但是,我确实知道__file__在C扩展上有一些古怪之处。例如,我可以在Mac上执行此操作:
>>> import collections #note that collections is a C extension in Python 2.5
>>> collections.__file__
'/System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-
dynload/collections.so'
但是,这在Windows计算机上引发了异常。
主要内容:什么是当前工作目录,什么是绝对路径与相对路径,Python处理绝对路径和相对路径在介绍绝对路径和相对路径之前,先要了解一下什么是当前工作目录。 什么是当前工作目录 每个运行在计算机上的程序,都有一个“当前工作目录”(或 cwd)。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。 注意,虽然文件夹是目录的更新的名称,但当前工作目录(或当前目录)是标准术语,没有当前工作文件夹这种说法。 在 Python 中,利用 os.getcwd() 函数可以取得当前工作路径的字
问题内容: 我正在运行Mac OS X环境,习惯于使用〜/提供对当前用户目录的访问。 例如,在我的python脚本中,我只是尝试使用 但是想用 尝试运行此文件或目录时出现错误消息。有任何想法吗? 问题答案: 您需要使用 正在当前工作目录中寻找名为“〜”的目录。 还请注意该函数的文档-特别是,您需要正确设置环境变量以确保进行扩展。在大多数情况下,这不会成为问题,但是如果不进行扩展,那可能就是原因。
问题内容: 键入标题时,我注意到有关此问题的一些类似问题,但它们似乎不在PHP中。那么用PHP函数解决该问题的方法是什么? 待指定。 有什么好主意吗?谢谢。 问题答案: 试试这个: 这将给 和 和 和
我有一个名为“test.py”的脚本,引用一个名为“cfg.yaml”的配置文件。这两个位于名为“测试/脚本”的同一个目录中。 现在我正在“test/data1/data2”内部编写一个bash脚本,名为task.sh 从任务内部。sh,我想调用python脚本 测验sh内容如下: test.py打开并读取cfg.yaml像open(cfg.yaml),但是当test.sh被调用时,它会失败,因为
这是我自己的USB驱动器上的程序文件夹: 我想使用启动 我不能使用这个:
问题内容: 给定相对路径,如何导入Python模块? 例如,如果包含和,和包含,我怎么导入到? 这是一个视觉表示: 希望包含,但是重组文件夹层次结构不是一种选择。 问题答案: 假设你的两个目录都是真实的Python包(文件中确实有文件),那么这是一个相对于脚本位置包含模块的安全解决方案。 我假设你想这样做,因为你需要在脚本中包括一组模块。我在多个产品的生产环境中使用了此功能,并在许多特殊情况下工作