我正在构建一个简单的助手脚本,用于将代码库中的几个模板文件复制到当前目录.但是,我没有存储模板的目录的绝对路径.我确实有脚本的相对路径,但是当我调用脚本时,它会将其视为相对于当前工作目录的路径.有没有办法指定此相对url来自脚本的位置?

推荐答案

在包含脚本的文件中,您希望执行以下操作:

import os
dirname = os.path.dirname(__file__)
filename = os.path.join(dirname, 'relative/path/to/file/you/want')

这将为您提供要查找的文件的绝对路径.请注意,如果您使用的是setuptools,您可能应该使用它的package resources API.

UPDATE:我在这里回复一条 comments ,以便粘贴一个代码示例.:-)

我认为__file__并不总是可用的(例如,当您直接运行文件而不是导入它时),这样的 idea 正确吗?

当你提到直接运行文件时,我假设你指的是__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

然而,我确实知道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相关问答推荐

在Python中管理打开对话框

Telethon加入私有频道

在np数组上实现无重叠的二维滑动窗口

driver. find_element无法通过class_name找到元素'""

形状弃用警告与组合多边形和多边形如何解决

如何在Python中获取`Genericums`超级类型?

将scipy. sparse矩阵直接保存为常规txt文件

如何防止Pandas将索引标为周期?

为什么常规操作不以其就地对应操作为基础?

统计numpy. ndarray中的项目列表出现次数的最快方法

我什么时候应该使用帆布和标签?

合并相似列表

Polars定制函数返回多列

一维不匹配两个数组上的广义ufunc

.awk文件可以使用子进程执行吗?

无法使用请求模块从网页上抓取一些产品的名称

在不中断格式的情况下在文件的特定部分插入XML标签

使用美汤对维基百科表格进行网络刮擦未返回任何内容

有没有一种方法可以根据不同索引集的数组从2D数组的对称子矩阵高效地构造3D数组?

如何在Polars中处理用户自定义函数的多行结果?