izb*_*izb 653 python path relative-path absolute-path
给定一个路径"mydir/myfile.txt"
,如何在Python中找到相对于当前工作目录的文件的绝对路径?例如在Windows上,我最终可能会:
"C:/example/cwd/mydir/myfile.txt"
Run Code Online (Sandbox Code Playgroud)
she*_*ang 948
>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
Run Code Online (Sandbox Code Playgroud)
如果它已经是绝对路径也可以工作:
>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'
Run Code Online (Sandbox Code Playgroud)
twa*_*lig 70
您可以使用新的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'
Run Code Online (Sandbox Code Playgroud)
或者在UNIX上:
>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'
Run Code Online (Sandbox Code Playgroud)
文档在这里:https://docs.python.org/3/library/pathlib.html
Wil*_*ris 56
>>> import os
>>> os.path.abspath('mydir/myfile.txt')
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
Run Code Online (Sandbox Code Playgroud)
Tom*_*Tom 24
更好的是,安装PyPI
模块,它将所有os.path
函数和其他相关函数包装到一个对象的方法中,该对象可以在任何使用字符串的地方使用:
>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
Run Code Online (Sandbox Code Playgroud)
Rud*_*lah 14
今天你也可以使用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
>>>
Run Code Online (Sandbox Code Playgroud)
我建议使用这个包,因为它为常见的os.path实用程序提供了一个干净的接口.
Luc*_*edo 11
这始终获取当前脚本的正确文件名,即使它是从另一个脚本中调用的。使用subprocess
.
import sys,os
filename = sys.argv[0]
Run Code Online (Sandbox Code Playgroud)
从那里,您可以获得脚本的完整路径:
>>> os.path.abspath(filename)
'/foo/bar/script.py'
Run Code Online (Sandbox Code Playgroud)
只需/..
在目录层次结构中“向上”附加任意次数,它还可以更轻松地导航文件夹。
要获取 cwd:
>>> os.path.abspath(filename+"/..")
'/foo/bar'
Run Code Online (Sandbox Code Playgroud)
对于父路径:
>>> os.path.abspath(filename+"/../..")
'/foo'
Run Code Online (Sandbox Code Playgroud)
通过"/.."
与其他文件名组合,您可以访问系统中的任何文件。
Dhi*_*abi 11
您可以使用它来获取特定文件的绝对路径。
from pathlib import Path
fpath = Path('myfile.txt').absolute()
print(fpath)
Run Code Online (Sandbox Code Playgroud)
Python 3.4+的更新pathlib
实际上回答了这个问题:
from pathlib import Path
relative = Path("mydir/myfile.txt")
absolute = relative.absolute() # absolute is a Path object
Run Code Online (Sandbox Code Playgroud)
如果只需要一个临时字符串,请记住,您可以将Path
对象与中的所有相关功能一起使用os.path
,当然包括abspath
:
from os.path import abspath
absolute = abspath(relative) # absolute is a str object
Run Code Online (Sandbox Code Playgroud)
import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))
Run Code Online (Sandbox Code Playgroud)
请注意expanduser
(在Unix上),如果给定的文件(或目录)名称和位置表达式可能包含前导~/
(代字号指向用户的主目录),并且expandvars
需要处理任何其他环境变量(如$HOME
),则这是必需的。
归档时间: |
|
查看次数: |
770357 次 |
最近记录: |