如何在Python中找到给定路径(例如"mydir/myfile.txt"
)的文件的绝对路径?例如,在Windows上,可能会得到以下结果:
"C:/example/cwd/mydir/myfile.txt"
如何在Python中找到给定路径(例如"mydir/myfile.txt"
)的文件的绝对路径?例如,在Windows上,可能会得到以下结果:
"C:/example/cwd/mydir/myfile.txt"
>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
如果已经是绝对路径,也同样适用:
>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
pathlib
。(你也可以使用 pip install pathlib
在 Python 2.6 或 2.7 中获取它。)作者写道:“该库的目标是提供一个简单的类层次结构,用于处理文件系统路径和用户对其执行的常见操作。”>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'
或在UNIX上:
>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'
os.path.abspath()
时出现错误:AttributeError: 'NoneType' object has no attribute 'startswith'
,而使用 Path().resolve()
则不能解决相同的相对文件路径问题。(在Linux和Python3.4上) - NuclearPeonresolve()
能够找到文件时才会返回完整路径。但是,即使文件不存在,os.path.abspath
也会返回完整路径。然而,在Linux上,它总是返回绝对路径。 - Mond WanPath(__file__)
而不是 resolve
方法时,会返回绝对路径而不是相对路径? - aderchoxresolve()
将遵循符号链接。如果不想这样做,请使用 absolute()
,它将不解析符号链接。 - BallpointBenimport os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))
注意,在Unix系统中,如果文件(或目录)的名称和位置所给表达式可能包含前导字符“~/”(波浪线表示用户的主目录),则需要使用expanduser
函数。而expandvars
函数可以处理其他环境变量(如$HOME
)。pathlib
。请查看我在此线程中的回答。 - twasbrilligfrom path import Path
,然后Path('mydir/myfile.txt').abspath()
。 - Frak即使在另一个脚本中调用时,此代码始终可以获取当前脚本的正确文件名。在使用subprocess
时尤其有用。
import sys,os
filename = sys.argv[0]
通过此方式,您可以使用以下代码获取脚本的完整路径:
>>> os.path.abspath(filename)
'/foo/bar/script.py'
通过多次添加/..
,可以更轻松地导航文件夹以向上访问目录层次结构。
要获取当前工作目录:
>>> os.path.abspath(filename+"/..")
'/foo/bar'
对于父路径:
>>> os.path.abspath(filename+"/../..")
'/foo'
通过将"/.."
与其他文件名结合使用,您可以访问系统中的任何文件。
filename
的值可能不同,但一旦你使用了 os.path.abspath()
,你将获得该文件的绝对路径,无论你从哪里调用它。 - Lucas Azevedopath.py
的unipath
包:http://sluggo.scrapping.cc/python/unipath/。>>> from unipath import Path
>>> absolute_path = Path('mydir/myfile.txt').absolute()
Path('C:\\example\\cwd\\mydir\\myfile.txt')
>>> str(absolute_path)
C:\\example\\cwd\\mydir\\myfile.txt
>>>
from pathlib import Path
fpath = Path('myfile.txt').absolute()
print(fpath)
如何在 Python 中找到文件的绝对路径相对于当前工作目录,例如“mydir / myfile.txt”的路径?
我会像这样做:
import os.path
os.path.join( os.getcwd(), 'mydir/myfile.txt' )
这将返回'/home/ecarroll/mydir/myfile.txt'
如果您使用的是 Mac
import os
upload_folder = os.path.abspath("static/img/users")
print(upload_folder)
>>>/Users/myUsername/PycharmProjects/OBS/static/img/user
normpath()
如下所示:normpath(join(os.getcwd(), path))
。因此,如果mydir/myfile.txt
不在os.getcwd()
下,则绝对路径不是真实路径。 - coanormydir/myfile.txt
隐含地指的是当前工作目录下的路径,因此等同于./mydir/myfile.txt
。这可能不是你想要输入的路径,但就我所知,这似乎是该路径的正确解释。你能否详细说明一下? - jpmc26abspath
函数的参数与实际文件之间没有任何联系。你可以给出任何路径名-不存在的文件和目录结构都可以-abspath
将简单地解析路径的位(包括父目录"..
"元素)并返回一个字符串。这只是从当前目录计算出的字符串;似乎与实际文件的任何关联都是偶然的。尝试os.path.abspath("/wow/junk/../blha/hooey")
。它可以工作。 - Mike Sos.path.exists
。相反,像PowerShell这样坚持使用标准路径解析函数存在路径的系统很难使用。 - jpmc26getcwd
,请重新阅读我的帖子。我的观点是:文档不准确。他们 readily blended 路径名的概念,将其视为真正的路径名与仅是可能引用文件系统中路径名的字符串之间的区别。在文档的其他地方,他们费尽心思地指出了这种差异,因为存在这种差异。再次强调,路径名的定义并不是它只是一个简单的字符串。abspath
的参数就是一个简单的字符串。这是我的最后一条评论;对于耽误你的时间我深表歉意。 - Mike S