如何在 Python 中获取文件的绝对路径
- 2024-12-23 08:39:00
- admin 原创
- 61
问题描述:
给定一个路径,例如"mydir/myfile.txt"
,如何在 Python 中查找文件的绝对路径?例如在 Windows 上,我可能会得到:
"C:/example/cwd/mydir/myfile.txt"
解决方案 1:
>>> 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'
解决方案 2:
您可以使用新的 Python 3.4 库pathlib
。(您也可以使用 获取适用于 Python 2.6 或 2.7 的库pip install pathlib
。)作者写道:“该库的目的是提供一个简单的类层次结构来处理文件系统路径以及用户对它们执行的常见操作。”
要在 Windows 中获取绝对路径:
>>> 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'
文档在这里:https://docs.python.org/3/library/pathlib.html
解决方案 3:
import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))
请注意,expanduser
如果文件(或目录)名称和位置的给定表达式可能包含前导~/
(波浪号指的是用户的主目录),则这是必要的(在 Unix 上),并expandvars
会处理任何其他环境变量(如$HOME
)。
解决方案 4:
Python 3.4+ 的更新pathlib
实际上回答了这个问题:
from pathlib import Path
relative = Path("mydir/myfile.txt")
absolute = relative.absolute() # absolute is a Path object
如果您只需要一个临时字符串,请记住您可以使用Path
具有所有相关功能的对象os.path
,当然包括abspath
:
from os.path import abspath
absolute = abspath(relative) # absolute is a str object
解决方案 5:
安装第三方路径模块(可在 上找到PyPI
),它将所有os.path
函数和其他相关函数包装到对象上的方法中,可以在使用字符串的任何地方使用:
>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
解决方案 6:
这始终会获取当前脚本的正确文件名,即使它是从另一个脚本中调用的。在使用时它特别有用subprocess
。
import sys,os
filename = sys.argv[0]
从那里,你可以使用以下命令获取脚本的完整路径:
>>> os.path.abspath(filename)
'/foo/bar/script.py'
它还可以使文件夹导航变得更加容易,只需/..
在目录层次结构中随意添加“向上”的次数即可。
获取 cwd:
>>> os.path.abspath(filename+"/..")
'/foo/bar'
对于父路径:
>>> os.path.abspath(filename+"/../..")
'/foo'
通过与其他文件名组合"/.."
,您可以访问系统中的任何文件。
解决方案 7:
今天您还可以使用unipath
基于以下包path.py
: 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
>>>
我建议使用这个包,因为它为常见的 os.path 实用程序提供了一个干净的接口。
解决方案 8:
您可以使用它来获取特定文件的绝对路径。
from pathlib import Path
fpath = Path('myfile.txt').absolute()
print(fpath)
解决方案 9:
给定一个路径,例如
mydir/myfile.txt
,如何在 Python 中找到相对于当前工作目录的文件的绝对路径?
我会这样做,
import os.path
os.path.join( os.getcwd(), 'mydir/myfile.txt' )
这又回来了'/home/ecarroll/mydir/myfile.txt'
解决方案 10:
如果你用的是 Mac
import os
upload_folder = os.path.abspath("static/img/users")
这将为您提供完整的路径:
print(upload_folder)
将显示以下路径:
>>>/Users/myUsername/PycharmProjects/OBS/static/img/user
解决方案 11:
pathlib.Path.resolve
了解和之间的区别可能会很有用pathlib.Path.absolute
:
代码正在运行:
>>> import os; os.getcwd()
'/home/mat'
我们正在使用 pathlib.Path:
>>> from pathlib import Path
当它是具有普通文件的简单路径时没有区别:
>>> rel = Path("file")
>>> rel.resolve()
PosixPath('/home/mat/file')
>>> rel.absolute()
PosixPath('/home/mat/file')
但是带有“..”的路径只会resolve
提供“真实”路径:
>>> rel = Path("file")
>>> rel.absolute()
PosixPath('/home/mat/../file')
>>> rel.resolve()
PosixPath('/home/file')
但是,如果路径指向符号链接,resolve
则会指向真实文件......
>>> rel = Path("symboliclink")
>>> rel.absolute()
PosixPath('/home/mat/symboliclink')
>>> rel.resolve()
PosixPath('/tmp/link.test')
明智选择。
解决方案 12:
如果有人使用 python 和 linux 并正在寻找文件的完整路径:
>>> path=os.popen("readlink -f file").read()
>>> print path
abs/path/to/file
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件