Answers:
>>> 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'
normpath()
按如下方式调用该函数:normpath(join(os.getcwd(), path))
。因此,如果mydir/myfile.txt
不根据os.getcwd()
,绝对路径不是真实路径。
mydir/myfile.txt
隐式引用当前工作目录内的路径,因此等效于./mydir/myfile.txt
。那可能不是您打算输入的路径,但是据我所知,这似乎是对路径的正确解释。你能详细说明吗?
abspath
函数的参数与实际文件之间没有链接。您可以提供任何路径名-不存在的文件和目录层次结构都很好-并且abspath只会解析路径的位(包括父目录“ ..
”元素)并返回一个字符串。这只是从当前目录计算出的字符串;似乎与实际文件的任何关联都是偶然的。尝试os.path.abspath("/wow/junk/../blha/hooey")
。有用。
os.path.exists
。相反,像PowerShell这样坚持使用标准路径解析功能的现有路径的系统很难使用。
relpath
:“未访问文件系统以确认是否存在或性质。path
” 如果这里的论点很明显,为什么要明确relpath
?
您可以使用新的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'
os.path.abspath()
给了我一个错误:AttributeError: 'NoneType' object has no attribute 'startswith'
使用Path().resolve()
不具有相同的相对文件路径。(Linux和Python3.4)
更好的是,安装模块(位于上PyPI
),它将所有os.path
功能和其他相关功能包装到对象上的方法中,无论使用什么字符串,都可以使用该方法:
>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>
pathlib
。看到我在这个线程的答案。
from path import Path
然后应该是Path('mydir/myfile.txt').abspath()
path
模块。链接的模块使用名为的类path
。
今天,您还可以使用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实用程序提供了一个干净的接口。
这始终获取当前脚本的文件名权,即使它是从另一个脚本中调用。使用时特别有用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'
通过"/.."
与其他文件名结合使用,您可以访问系统中的任何文件。
模块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
我更喜欢使用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.path.abspath()
)glob
应用于您
如果您使用的是Mac
import os
upload_folder = os.path.abspath("static/img/users")
这将为您提供完整的路径:
print(upload_folder)
将显示以下路径:
>>>/Users/myUsername/PycharmProjects/OBS/static/img/user