1"C:/example/cwd/mydir/myfile.txt"123>>> import os
"/>

如何获取python中的绝对文件路径

如何获取python中的绝对文件路径

How to get an absolute file path in Python

给定一个路径,如"mydir/myfile.txt",如何找到文件相对于python中当前工作目录的绝对路径?例如,在Windows上,我可能会得到:

1
"C:/example/cwd/mydir/myfile.txt"

1
2
3
>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

如果它已经是一个绝对路径,也可以工作:

1
2
3
>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

您可以使用新的python 3.4库pathlib。(您也可以使用pip install pathlib为python 2.6或2.7获得它。)作者写道:"这个库的目的是提供一个简单的类层次结构来处理文件系统路径,以及用户对它们进行的常见操作。"

要在Windows中获取绝对路径,请执行以下操作:

1
2
3
4
5
6
>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'

或在UNIX上:

1
2
3
4
5
6
>>> 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


1
2
3
4
>>> import os
>>> os.path.abspath('mydir/myfile.txt')
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>

更好的是,安装path.py模块,它将所有os.path函数和其他相关函数封装到对象的方法中,该对象可在使用字符串的任何位置使用:

1
2
3
4
>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>

今天,您还可以使用基于path.pyunipath包:http://slugo.crating.cc/python/unipath/

1
2
3
4
5
6
>>> 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的更新,它实际上回答了以下问题:

1
2
3
4
from pathlib import Path

relative = Path("mydir/myfile.txt")
absolute = relative.absolute()  # absolute is a Path object

如果您只需要一个临时字符串,请记住,您可以在os.path中使用具有所有相关功能的Path对象,当然包括abspath对象:

1
2
3
from os.path import abspath

absolute = abspath(relative)  # absolute is a str object


1
2
import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))

注意,如果文件(或目录)名称和位置的给定表达式可能包含一个前导的~/(tilde是指用户的主目录),expandvars处理任何其他环境变量(如$HOME)时,expanduser是必需的。


我更喜欢用glob

以下是如何列出当前文件夹中的所有文件类型:

1
2
3
import glob
for x in glob.glob():
    print(x)

以下是如何列出当前文件夹中的所有.txt文件:

1
2
3
import glob
for x in glob.glob('*.txt'):
    print(x)

以下是如何列出所选目录中的所有文件类型:

1
2
3
import glob
for x in glob.glob('C:/example/hi/hello/'):
    print(x)

希望这对你有帮助


模块os提供了一种查找abs路径的方法。

但是Linux中的大多数路径都是从EDOCX1(tilde)开始的,这并不能给出令人满意的结果。

所以你可以用srblib来做这个。

1
2
3
4
5
6
>>> 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安装

https://pypi.org/project/srblib网站/


即使从另一个脚本中调用当前脚本,它也总是获得正确的文件名。它在使用subprocess时特别有用。

1
2
3
import sys,os

filename = sys.argv[0]

从这里,您可以通过以下方式获取脚本的完整路径:

1
2
>>> os.path.abspath(filename)
'/foo/bar/script.py'

只要在目录层次结构中添加/..,就可以更容易地导航文件夹。

获得CWD:

1
2
>>> os.path.abspath(filename+"/..")
'/foo/bar'

对于父路径:

1
2
>>> os.path.abspath(filename+"/../..")
'/foo'

通过将"/.."与其他文件名组合,您可以访问系统中的任何文件。


如果有人正在使用python和linux并寻找文件的完整路径:

1
2
3
>>> path=os.popen("readlink -f file").read()
>>> print path
abs/path/to/file


如果你在Mac电脑上

1
2
import os
upload_folder = os.path.abspath("static/img/users")

这将为您提供完整的路径:

1
print(upload_folder)

将显示以下路径:

1
>>>/Users/myUsername/PycharmProjects/OBS/static/img/user

1
2
3
filePath = os.path.abspath(directoryName)
filePathWithSlash = filePath +"\"
filenameWithPath = os.path.join(filePathWithSlash, filename)


推荐阅读

    linux获取地址命令?

    linux获取地址命令?,地址,网络,信息,系统,设备,终端,命令,中心,管理,数字,lin

    linux命令添加文件?

    linux命令添加文件?,工作,简介,数据,系统,文件,命令,操作,文件名,内容,终端,l

    linux文件输入命令?

    linux文件输入命令?,工作,系统,地址,信息,工具,位置,命令,设备,发行,首开,lin

    文件备份命令linux?

    文件备份命令linux?,网站,系统,设备,文件,软件,网络,工具,环境,数据,地址,lin

    linux遍历文件命令?

    linux遍历文件命令?,系统,数据,工具,文件,平台,信息,百度,位置,时间,适当,lin

    linux命令查看小文件?

    linux命令查看小文件?,系统,档案,文件夹,标准,软件,单位,文件,命令,大小,内

    linux文件中剪切命令?

    linux文件中剪切命令?,位置,系统,工作,命令,发行,连续,标准,终端,文件,目录,l

    linux存储文件命令?

    linux存储文件命令?,系统,地址,工作,命令,软件,电脑,标准,底部,信息,文件,lin

    linux保存命令文件?

    linux保存命令文件?,系统,状态,命令,文件,第一,管理,电脑,模式,编辑,终端,lin

    linux私有文件命令?

    linux私有文件命令?,系统,工作,工具,命令,设备,文件,目录,位置,不了,情况,Lin

    删除linux文件命令?

    删除linux文件命令?,名称,不了,文件夹,命令,文件,目录,方法,指令,子目录,选

    linux文件录入命令?

    linux文件录入命令?,系统,命令,网络,标准,时间,密码,名字,管理,文件,文件夹,L

    文件复制命令linux?

    文件复制命令linux?,系统,地址,文件,目录,位置,工具,命令,目标,文件名,源文

    linux命令移除文件夹?

    linux命令移除文件夹?,命令,文件夹,通用,不了,数据,名称,档案,系统,文件,目

    linux文件倒序命令?

    linux文件倒序命令?,地址,工作,管理,标准,命令,基础,系统,数据,最新,代码,lin

    在linux文件后加命令?

    在linux文件后加命令?,系统,工作,命令,工具,电脑,基础,管理,情况,第一,简介,L

    linux命令删除文件夹?

    linux命令删除文件夹?,系统,名称,环境,文件夹,不了,命令,文件,数据,档案,目

    linux常用的命令路径?

    linux常用的命令路径?,地址,工作,基础,网络,管理,系统,信息,命令,企业,服务,l

    linux命令看文件编码?

    linux命令看文件编码?,状态,系统,文件,工具,名称,数据,命令,格式,汉字,以下,L

    linux切换路径命令行?

    linux切换路径命令行?,系统,工作,名称,地址,目录,命令,工具,密码,一致,管理,