我正在构建一个简单的助手脚本,用于将代码库中的两个模板文件复制到当前目录。但是,我没有存储模板的目录的绝对路径。我有一个相对路径从脚本,但当我调用脚本,它把它作为一个相对于当前工作目录的路径。是否有一种方法来指定这个相对url是来自脚本的位置?
当前回答
我不确定这是否适用于一些旧版本,但我相信Python 3.3具有原生相对路径支持。
例如,下面的代码应该在与python脚本相同的文件夹中创建一个文本文件:
open("text_file_name.txt", "w+t")
(注意,如果是相对路径,开头不应该有正斜杠或反斜杠)
其他回答
Hi首先你需要理解os。path。abspath(path)和os。path。relpath(path)
简而言之,os.path.abspath(path)将相对路径转换为绝对路径。如果提供的路径本身是一个绝对路径,那么函数返回相同的路径。
类似地,os.path.relpath(path)将绝对路径转换为相对路径。如果提供的路径本身是相对路径,则函数返回相同的路径。
下面的例子可以让你正确理解上面的概念:
假设我有一个文件input_file_list.txt,其中包含要由我的python脚本处理的输入文件列表。
D: \ \ input1.dic浓缩
D: \ \ input2.dic浓缩
D: \ Copyioconc input_file_list。txt
如果你看到上面的文件夹结构,input_file_list.txt在Copyofconc文件夹中,python脚本要处理的文件在conc文件夹中
但是input_file_list.txt文件的内容如下所示:
. . \ \ input1.dic浓缩
. . \ \ input2.dic浓缩
我的python脚本在D: drive中。
input_file_list.txt文件中提供的相对路径是相对于input_file_list.txt文件的路径。
因此,当python脚本执行当前工作目录时(使用os.getcwd()获取路径)
由于我的相对路径是相对于input_file_list.txt,即“D:\Copyofconc”,我必须将当前工作目录更改为“D:\Copyofconc”。
所以我必须使用os.chdir('D:\Copyofconc'),所以当前的工作目录应该是“D:\Copyofconc”。
现在获取文件input1。Dic和input2。Dic,我将读取“..\conc\input1”这行。然后使用命令
Input1_path = os.path.abspath('..\conc\input1.dic')(将相对路径更改为绝对路径。这里作为当前的工作目录是“D:\Copyofconc”,文件“.\conc\input1.”相对于"D:\Copyofconc")
所以input1_path应该是“D:\conc\input1.dic”
您需要os.path.realpath(下面的示例将父目录添加到您的路径中)
import sys,os
sys.path.append(os.path.realpath('..'))
一个简单的解决办法是
import os
os.chdir(os.path.dirname(__file__))
我不确定这是否适用于一些旧版本,但我相信Python 3.3具有原生相对路径支持。
例如,下面的代码应该在与python脚本相同的文件夹中创建一个文本文件:
open("text_file_name.txt", "w+t")
(注意,如果是相对路径,开头不应该有正斜杠或反斜杠)
从C:\Users\xyz\myFolder到C:\Users\xyz\testdata:
import os
working_dir = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
# C:\Users\xyz\myFolder
print(working_dir)
updated_working_dir = os.path.join(os.path.realpath(working_dir + '/../'), 'testdata')
# C:\Users\xyz\testdata
print(updated_working_dir)
输出
C:\Users\xyz\myFolder
C:\Users\xyz\testdata
推荐文章
- 如何用OpenCV2.0和Python2.6调整图像大小
- 在每个列表元素上调用int()函数?
- 当使用代码存储库时,如何引用资源的相对路径
- 如何在Flask-SQLAlchemy中按id删除记录
- 在OSX中永久设置PATH环境变量
- 在Python中插入列表的第一个位置
- Python Pandas只合并某些列
- 如何在一行中连接两个集而不使用“|”
- 从字符串中移除前缀
- 代码结束时发出警报
- 如何在Python中按字母顺序排序字符串中的字母
- 在matplotlib中将y轴标签添加到次要y轴
- 如何消除数独方块的凹凸缺陷?
- 为什么出现这个UnboundLocalError(闭包)?
- 使用Python请求的异步请求