西宁企业网站开发定制,虹口专业网站建设公司,邯郸旅游景点,网站源码编辑软件文件路径模块os.path 文章目录文件路径模块os.path1.概述2.解析路径2.1.拆分路径和文件名split2.2.获取文件名称basename2.3.返回路径第一部分dirname2.4.扩展名称解析路径splitext2.5.返回公共前缀路径commonprefix3.创建路径3.1.拼接路径join3.2.获取家目录3.3.规范化路径nor…文件路径模块os.path 文章目录文件路径模块os.path1.概述2.解析路径2.1.拆分路径和文件名split2.2.获取文件名称basename2.3.返回路径第一部分dirname2.4.扩展名称解析路径splitext2.5.返回公共前缀路径commonprefix3.创建路径3.1.拼接路径join3.2.获取家目录3.3.规范化路径normpath3.4.相对路径转化为绝对路径abspath4.获取文件属性5.测试文件1.概述
这篇文章介绍与文件操作相关的路径操作模块包含解析路径、建立路径、规范化路径等相关操作。
2.解析路径
2.1.拆分路径和文件名split
split函数用来将文件路径查分为两部分路径和文件名。它返回一个tuple这个tuple第一个元素是路径第二个元素是路径的最后一个部分通常是文件名称。
import os.pathPATHS [/one/two/three,/one/two/three/,/,.,,
]for path in PATHS:print({!r:17} : {}.format(path, os.path.split(path)))运行上面的代码split函数默认通过 / 拆分文件路径以最后一个/ 为分界线左边的是路径右边的是文件名称。
# 最后一个/右边有three返回的元组中第二个元素为three
/one/two/three : (/one/two, three)
# 最后一个/右边没有内容返回的元组中第二个元素为空
/one/two/three/ : (/one/two/three, )/ : (/, ). : (, .) : (, )2.2.获取文件名称basename
basename函数接收一个代表文件系统路径的类路径对象返回一个代表指定路径基本名称的字符串值。它返回的值等价于split函数返回值的第二部分他会将整个路径剔除到最后一个元素如果最后一个元素是文件名称则获取的就是一个文件名称。
import os.pathPATHS [/one/two/three,/one/two/three/,/,.,,
]for path in PATHS:print({!r:17} : {!r}.format(path, os.path.basename(path)))
运行上面的代码返回值是路径中最后一个元素这个元素也称为路径的基本名称。
# 冒号左边是完整路径右边是拆分路径获取的值
/one/two/three : three
/one/two/three/ : / : . : . : 2.3.返回路径第一部分dirname
dirname函数返回解析路径的第一部分将basename的结果和dirname结果结合就可以得到原来的路径。
import os.pathPATHS [/one/two/three,/one/two/three/,/,.,,
]for path in PATHS:print({!r:17} : {!r}.format(path, os.path.dirname(path)))
运行结果 /one/two/three : /one/two
/one/two/three/ : /one/two/three/ : /. : : 2.4.扩展名称解析路径splitext
splitext函数与split函数相似不过它不是根据目录分隔符拆分路径而是根据扩展名分隔符。
import os.pathPATHS [filename.txt,filename,/path/to/filename.txt,/,,my-archive.tar.gz,no-extension.,
]for path in PATHS:print({!r:21} : {!r}.format(path, os.path.splitext(path)))运行结果 filename.txt : (filename, .txt)filename : (filename, )
/path/to/filename.txt : (/path/to/filename, .txt)/ : (/, ) : (, )my-archive.tar.gz : (my-archive.tar, .gz)no-extension. : (no-extension, .)
2.5.返回公共前缀路径commonprefix
commonprefix函数返回路径列表中最大公共前缀这个值可能表示一个不存在的路径而且并不考虑路径的分隔符所以这个前缀可能并不落在一个分隔符边界上。
import os.pathpaths [/one/two/three/four,/one/two/threefold,/one/two/three/,]
for path in paths:print(PATH:, path)print()
print(PREFIX:, os.path.commonprefix(paths))运行结果
PATH: /one/two/three/four
PATH: /one/two/threefold
PATH: /one/two/three/PREFIX: /one/two/three
3.创建路径
3.1.拼接路径join
使用join将多个路径拼接成一个路径如果要拼接的参数以分隔符开头 前面所有的参数都会丢弃新参数会成为返回这的开始部分。
import os.pathPATHS [(one, two, three),(/, one, two, three),(/one, /two, /three),
]for parts in PATHS:print({} : {!r}.format(parts, os.path.join(*parts)))结果
(one, two, three) : one/two/three
(/, one, two, three) : /one/two/three
(/one, /two, /three) : /three3.2.获取家目录
一般如果你自己使用系统的时候是可以用~来代表/home/你的名字/这个路径的但是python是不认识~这个符号的如果你写路径的时候直接写~/balabala程序是跑不动的。 expanduser函数可以将~获取服务器家目录方便我们访问或创建家目录后面的路径。如果用户的家目录找不到字符串将不做任何改动直接返回。
import os.pathfor user in [, /dhellmann, /nosuchuser]:lookup ~ userprint({!r:15} : {!r}.format(lookup, os.path.expanduser(lookup)))运行结果
# /Users/edy 是当前服务器上的家目录~ : /Users/edy~/dhellmann : /Users/edy/dhellmann~/nosuchuser : /Users/edy/nosuchuser
3.3.规范化路径normpath
使用join函数或者添加单独字符串路径时得到的路径可能会有多余的分隔符。使用normpath函数可以清除这些内容
import os.pathPATHS [one//two//three,one/./two/./three,one/../alt/two/three,
]for path in PATHS:print({!r:22} : {!r}.format(path, os.path.normpath(path)))运行结果 one//two//three : one/two/threeone/./two/./three : one/two/three
one/../alt/two/three : alt/two/three3.4.相对路径转化为绝对路径abspath
abspath函数的作用是将给定的文件路径转为绝对路径例如下面的例子PATHS列表中给的是文件相对路径然后在他们的前面拼接上当前工作目录将他们转为绝对路径。而不是根据给定的一个文件或相对路径去查找该文件的绝对路径。
import os
import os.pathos.chdir(/usr)PATHS [.,..,./one/two/three,../one/two/three,
]for path in PATHS:print({!r:21} : {!r}.format(path, os.path.abspath(path)))运行结果
# 获取当前的工作目录的绝对路径. : /usr.. : /# 相对路径拼接上当前工作目录转为绝对路径./one/two/three : /usr/one/two/three
# 当前工作目录的上级目录拼接上相对路径转为绝对路径../one/two/three : /one/two/three4.获取文件属性
os.path除了操作路径还可以获取文件属性。
import os.path
import time
# 获取文件的绝对路径
print(File :, __file__)
# 获取文件访问时间
print(Access time :, time.ctime(os.path.getatime(__file__)))
# 获取文件修改时间
print(Modified time:, time.ctime(os.path.getmtime(__file__)))
# 获取创建时间
print(Change time :, time.ctime(os.path.getctime(__file__)))
# 获取文件大小以字节为单位
print(Size :, os.path.getsize(__file__))运行结果
# 获取文件的绝对路径
File : /Users/edy/create_path.py
# 获取文件访问时间
Access time : Mon Feb 13 14:38:26 2023
# 获取文件修改时间
Modified time: Mon Feb 13 14:38:26 2023
# 获取创建时间
Change time : Mon Feb 13 14:38:26 2023
# 获取文件大小以字节为单位
Size : 13385.测试文件
当程序遇到一个路径时需要判断当前路径是一个文件文件夹还是一个链接是否存在等这些os.path提供了函数用来判断。
import os.pathFILENAMES [__file__,os.path.dirname(__file__),/,./broken_link,
]for file in FILENAMES:print(File : {!r}.format(file))# 是否是绝对路径print(Absolute :, os.path.isabs(file))# 是否是文件print(Is File? :, os.path.isfile(file))# 是否是目录print(Is Dir? :, os.path.isdir(file))# 是否是一个链接print(Is Link? :, os.path.islink(file))# 是否是一个挂载点print(Mountpoint? :, os.path.ismount(file))# 判断文件是否存在print(Exists? :, os.path.exists(file))# 判断路径是否存在如果存在则返回 True反之返回 Falseprint(Link Exists?:, os.path.lexists(file))print()运行结果
File : /Users/edy/my_path
Absolute : True
Is File? : False
Is Dir? : True
Is Link? : False
Mountpoint? : False
Exists? : True
Link Exists?: TrueFile : /
Absolute : True
Is File? : False
Is Dir? : True
Is Link? : False
Mountpoint? : True
Exists? : True
Link Exists?: TrueFile : ./broken_link
Absolute : False
Is File? : False
Is Dir? : False
Is Link? : False
Mountpoint? : False
Exists? : False
Link Exists?: False