在Python中的相对位置打开文件
假设python代码在先前的windows目录中并不知道的地方执行,比如'main',并且在运行代码的任何地方需要访问目录'main / 2091 / data.txt'。
我应该如何使用open(位置)功能? 什么位置应该?
编辑:
我发现,简单的代码下面会工作..它有什么缺点吗?
file="2091sample.txt"
path=os.getcwd()+file
fp=open(path,'r+');
有了这种类型的事情,你需要小心你的实际工作目录是什么。 例如,您不能从文件所在的目录运行脚本。在这种情况下,您不能仅使用相对路径。
如果你确定你想要的文件位于脚本实际所在位置的子目录下,你可以使用__file__
来帮助你。 __file__
是您正在运行的脚本所在位置的完整路径。
所以你可以摆弄这样的东西:
import os
script_dir = os.path.dirname(__file__) #<-- absolute dir the script is in
rel_path = "2091/data.txt"
abs_file_path = os.path.join(script_dir, rel_path)
此代码正常工作:
import os
def readFile(filename):
filehandle = open(filename)
print filehandle.read()
filehandle.close()
fileDir = os.path.dirname(os.path.realpath('__file__'))
print fileDir
#For accessing the file in the same folder
filename = "same.txt"
readFile(filename)
#For accessing the file in a folder contained in the current folder
filename = os.path.join(fileDir, 'Folder1.1/same.txt')
readFile(filename)
#For accessing the file in the parent folder of the current folder
filename = os.path.join(fileDir, '../same.txt')
readFile(filename)
#For accessing the file inside a sibling folder.
filename = os.path.join(fileDir, '../Folder2/same.txt')
filename = os.path.abspath(os.path.realpath(filename))
print filename
readFile(filename)
我创建了一个帐户,以便我可以澄清我认为我在Russ的原始回复中找到的差异。
作为参考,他的原始答案是:
import os
script_dir = os.path.dirname(__file__)
rel_path = "2091/data.txt"
abs_file_path = os.path.join(script_dir, rel_path)
这是一个很好的答案,因为它试图动态创建一个到期望文件的绝对系统路径。
Cory Mawhorter注意到__file__
是一个相对路径(在我的系统中也是如此),并且使用os.path.abspath(__file__)
建议。 但是, os.path.abspath
返回当前脚本的绝对路径(即/path/to/dir/foobar.py
)
要使用这种方法(以及我最终如何工作),必须从路径末尾删除脚本名称:
import os
script_path = os.path.abspath(__file__) # i.e. /path/to/dir/foobar.py
script_dir = os.path.split(script_path)[0] #i.e. /path/to/dir/
rel_path = "2091/data.txt"
abs_file_path = os.path.join(script_dir, rel_path)
生成的abs_file_path(在本例中)变为: /path/to/dir/2091/data.txt