如何在Python中获取绝对文件路径
-
09-06-2019 - |
题
给定一条路径,例如 "mydir/myfile.txt"
, ,如何在Python中找到文件相对于当前工作目录的绝对路径?例如。在 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'
其他提示
您可以使用新的 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'
>>> import os
>>> os.path.abspath('mydir/myfile.txt')
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
更好的是,安装模块(可以在 PyPI
),它包含了所有 os.path
函数和其他相关函数转换为对象上的方法,可以在任何使用字符串的地方使用:
>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
今天您还可以使用 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 实用程序的干净接口.
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
import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))
注意 expanduser
如果文件(或目录)名称和位置的给定表达式可能包含前导,则这是必要的(在 Unix 上) ~/
(波浪号指的是用户的主目录),并且 expandvars
处理任何其他环境变量(例如 $HOME
).
我更喜欢使用 glob
以下是列出当前文件夹中所有文件类型的方法:
import glob
for x in glob.glob():
print(x)
以下是列出当前文件夹中所有(例如).txt 文件的方法:
import glob
for x in glob.glob('*.txt'):
print(x)
以下是列出所选目录中所有文件类型的方法:
import glob
for x in glob.glob('C:/example/hi/hello/'):
print(x)
希望这对你有帮助
模块 os
提供了一种找到abs路径的方法。
但 Linux 中的大多数路径都以 ~
(波形符),这并没有给出令人满意的结果。
所以你可以使用 srblib
为了那个原因。
>>> import os
>>> os.path.abspath('~/hello/world')
'/home/srb/Desktop/~/hello/world'
>>> from srblib import abs_path
>>> abs_path('~/hello/world')
'/home/srb/hello/world'
安装它使用 python3 -m pip install srblib
如果你使用的是 Mac
import os
upload_folder = os.path.abspath("static/img/users")
这将为您提供完整路径:
print(upload_folder)
将显示以下路径:
>>>/Users/myUsername/PycharmProjects/OBS/static/img/user
如果有人使用 python 和 linux 并寻找文件的完整路径:
>>> path=os.popen("readlink -f file").read()
>>> print path
abs/path/to/file
这 总是 获取当前脚本的正确文件名,即使它是从另一个脚本中调用的。使用时特别有用 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'
通过结合 "/.."
使用其他文件名,您可以访问系统中的任何文件。
filePath = os.path.abspath(directoryName)
filePathWithSlash = filePath + "\\"
filenameWithPath = os.path.join(filePathWithSlash, filename)