第十章 os.path模块

2023-11-17

1. os.path模块介绍

os 模块是Python 内置的与操作系统功能和文件系统相关的模块。该模块的子模块os.path 是专门用于进行路径操作的模块。常用的路径操作主要有判断目录是否存在、创建目录、删除目录和遍历目录等。

说明:在使用os.path 模块时,推荐使用字符串(Unicode)表示文件名或者路径。由于某些Unix 操作系统不支持Unicode 字符串,所以需要使用字节对象;而在Windows 操作系统中,则推荐所有的应用程序都使用字符串对象来访问文件。

os 模块和它的子模块os.path 都属于内置模块,不需要安装,直接导入即可使用。在Python 程序中,使用import 语句导入os 模块后,既可以使用os 模块提供的属性和方法,又可以使用os.path模块提供的属性和方法。导入os 模块的代码如下:

import os

说明:导入os 模块后,也可以使用其子模块os.path。

如果在程序中,只涉及到os.path 模块的内容,也可以直接导入os.path,代码如下:

import os.path

使用上面的代码导入os.path 模块后,就可以使用该模块提供的属性和方法了。如果不确定该模块都提供了哪些属性和方法,可以使用Python 的内置函数dir() 获取其全部方法列表,代码如下:

import os.path         	# 操作路径的模块

print(dir(os.path))

2. supports_unicode_f ilenames属性——标记文件系统是否支持Unicode文件名

supports_unicode_filenames 属性用于标记当前的文件系统是否支持Unicode 文件名。语法格式如下:

os.path.supports_unicode_filenames

参数说明:

  • 返回值:如果文件系统支持Unicode文件名,则返回值为True。

使用supports_unicode_filenames 属性判断当前系统是否支持Unicode 文件名,代码如下:

import os.path                          		# 导入os.path模块

print(os.path.supports_unicode_filenames) 		# 打印当前系统是否支持Unicode文件名

3. abspath()方法——获取绝对路径

abspath() 方法用于返回文件或者目录的绝对路径。语法格式如下:

os.path.abspath(path)

参数说明:

  • path:表示要获取绝对路径的相对路径,可以是文件也可以是目录。

  • 返回值:返回获取到的绝对路径。

说明:绝对路径是指在使用文件时指定文件的实际路径。它不依赖于当前工作目录。

注意:abspath() 方法在获取实际路径时,并不会检查路径是否真实存在,只是把当前文件目录与abspath()方法给定的路径进行拼接。

使用abspath() 方法获取相对路径“demo\message.txt”的绝对路径,代码如下:

import os

print(os.path.abspath(r’demo\message.txt’)) 		# 打印绝对路径

如果当前工作目录为“E:\program\Python\Code”,则程序运行结果如下:

E:\program\Python\Code\demo\message.txt

使用abspath() 方法获取当前Python 文件的绝对路径,代码如下:

import os.path 					# 操作路径的模块

# 打印当前Python文件的绝对路径

print(os.path.abspath(os.path.basename(__file__)))

4. basename()方法——从一个路径中提取文件名

basename() 方法用于从一个路径中提取文件名。当指定的路径是一个不包括文件名的路径(如c:/temp/)时,返回空字符串。语法格式如下:

os.path.basename(path)

参数说明:

  • path:表示要提取文件名的路径。

  • 返回值:返回提取后的文件名。

使用basename() 方法获取相对路径“demo\message.txt”中的文件名,代码如下:

import os.path 									# 导入os.path模块

print(os.path.basename(r”demo\message.txt”)) 	# 打印文件名message.txt

程序运行结果如下:

message.txt

使用basename() 方法获取绝对路径中的文件名,代码如下:

import os 										# 导入os模块

path1 = 'e:/demo/test.txt'

path2 = 'e:/demo'

print(os.path.basename(path1))

print(os.path.basename(path2))

5. commonpath()方法——提取共有的最长路径

commonpath() 方法用于从一个目录列表中提取各个路径共有的最长路径。如果目录列表为空,或者各路径间没有共有路径,则返回空字符串。语法格式如下:

os.path.commonpath(paths)

参数说明:

  • paths:表示要提取路径的目录列表。

  • 返回值:返回提取后的字符串。

使用commonpath() 方法从目录列表中提取最长的共有路径,代码如下:

import os.path                                                      			# 导入os.path模块

pathlist = [r’E:/demo/temp.txt’,r’E:/demo/test/test.txt’,r’E:/demo/test.txt’] 	# 目录列表

print(os.path.commonpath(pathlist))                                   			# 打印最长的共有路径

6. commonpref ix()方法——提取共有的路径前缀

commonprefix() 方法用于从一个目录列表中提取各个路径共有的前缀。如果目录列表为空,或者各路径间没有共有前缀,则返回空字符串。语法格式如下:

os.path.commonprefix(list)

参数说明:

  • list:表示要提取前缀的目录列表。

  • 返回值:返回提取后的字符串。

说明:由于该方法一次只能处理一个字符,所以可能会返回无效路径。要获得有效路径,请使用commonpath() 方法。

使用commonprefix() 方法从目录列表中提取共有的路径前缀,代码如下:

import os.path 								# 导入os.path模块

pathlist = [r’E:/demo/temp.txt’,r’E:/demo/test/test.txt’,r’E:/demo/test.txt’] 		# 目录列表

print(os.path.commonprefix(pathlist)) 		# 打印最长的共有路径前缀

7. dirname()方法——获取路径中的目录

dirname() 方法用于从一个路径中提取目录。它相当于使用os.path.split() 方法分割路径后,得到的第一个元素。语法格式如下:

os.path.dirname(path)

参数说明:

  • path:表示要提取目录的路径。

  • 返回值:返回提取后的目录。

使用dirname() 方法从绝对路径“E:/demo/test/test.txt”中提取目录,代码如下:

import os.path                			# 导入os.path模块

path = r’E:/demo/test/test.txt’ 		# 绝对路径

print(os.path.dirname(path))   			# 提取目录

程序运行结果如下:

E:/demo/test

使用dirname() 方法从相对路径“python/demo/01/hello”中提取目录,代码如下:

import os.path 						# 导入os.path模块

path = r’ python/demo/01/hello’ 	# 相对路径

print(os.path.dirname(path)) 		# 提取目录

8. exists()方法——判断路径是否存在(准确)

exists() 方法用于判断路径(文件或目录)是否存在,如果存在则返回True ;不存在则返回False。如果是断开的符号链接,也返回False。语法格式如下:

os.path.exists(path)

参数说明:

  • path:表示要判断的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:如果给定的路径存在,则返回True,否则返回False。

注意:在使用exists() 方法时,如果某些平台未授予os.stat() 对所请求文件有执行的权限,即使路径真实存在,使用该方法也会返回False。

使用exists() 方法判断保存在“E:/mr/test/”目录下的“hello.py”文件是否存在,代码如下:

import os.path                   			# 导入os.path模块

path = r’E:/mr/test/hello.py’             	# 文件

if os.path.exists(path):          			# 判断文件是否存在

print(path,’文件存在!')

else:

print(path,’文件不存在!')

使用exists() 方法判断“E:/mr/test/”目录是否存在,代码如下:

import os.path                				# 导入os.path模块

path = r’E:/mr/test/# 目录

if os.path.exists(path):       				# 判断目录是否存在

print(path,’目录存在!')

else:

print(path,’目录不存在!')

9. lexists()方法——判断路径是否存在(不准确)

lexists() 方法用于判断路径(文件或目录)是否存在,如果存在则返回True,不存在则返回False ;如果是断开的符号链接则返回True。语法格式如下:

os.path.lexists(path)

参数说明:

  • path:表示要判断的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:如果给定的路径存在,则返回True,否则返回False。

说明:在使用lexists() 方法时,如果路径存在却已经损坏时,则返回True。

使用lexists() 方法判断保存在“E:/mr/test/”目录下的“hello.py”文件是否存在,代码如下:

import os.path                		# 导入os.path模块

path = r’E:/mr/test/hello.py’      	# 文件

if os.path.lexists(path):      		# 判断文件是否存在

print(path,’文件存在!')

else:

print(path,’文件不存在!')

10. expanduser()方法——替换“~user” 格式的路径名称

expanduser() 方法用于使用当前用户的主目录替换“”或“user”格式的路径。语法格式如下:

os.path.expanduser(path)

参数说明:

  • path:表示要替换的路径,需要以“~”为前缀,否则不执行替换。

  • 返回值:返回替换后的路径。如果替换失败或者路径不是以“~”开头,将返回替换前路径。

使用expanduser() 方法输出当前用户的主目录,代码如下:

import os.path                		# 导入os.path模块

print(os.path.expanduser(r’~)) 	# 打印当前用户的主目录

程序运行结果如下:

C:\Users\Administrator

如果expanduser() 方法的参数为“~”前缀后接一个路径名,则替换后得到当前用户的根目录(不包括用户名)。例如,将user 和当前用户的根目录拼接,代码如下:

import os.path 							# 导入os.path模块

print(os.path.expanduser(r’~user’)) 	# 将user和当前用户的根目录拼接

程序运行结果如下:

C:\Users\user

在使用PyInstaller 模块打包Python 程序为可执行文件时,默认会将生成的可执行文件保存到当前用户的dist 目录中,要获取该目录的完整路径可以使用下面的代码:

import os.path 								# 导入os.path模块

print(os.path.expanduser(r’~/dist’)) 		# 打印dist的完整路径

11. expandvars()方法——使用环境 变量的值替换

expandvars() 方法用于使用环境变量的参数数值替换路径中的指定变量。语法格式如下:

os.path.expandvars(path)

参数说明:

  • path:指定环境变量的参数,需要包含“$name”或“${name}”(其中的name 为已经定义的环境变量名称)。

  • 返回值:返回环境变量的值。

使用expandvars() 方法输出系统中配置的环境变量path 的值,代码如下:

import os.path 							# 导入os.path模块

print(os.path.expandvars(r’$path’)) 	# 打印环境变量path的值

12. getatime()方法——获取最后一次访问路径的时间

getatime() 方法用于获取最后一次访问路径的时间。语法格式如下:

os.path.getatime(path)

参数说明:

  • path:表示要获取的最后一次访问时间的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:返回从纪元开始到最后一次访问该路径的秒数,值为浮点数。

使用getatime() 方法获取指定目录的最后访问时间并输出,由于输出值为秒数,不容易看出具体时间,所以再应用time 模块将秒数转换为日期时间,代码如下:

import time                                                  		# 导入时间模块

import os.path                                               		# 导入os.path模块

mtime = os.path.getatime(r’E:/mr/test’)                          	# 获取路径最后一次访问时间

print(mtime)                                                 		# 打印秒数

print(time.strftime(%Y-%m-%d %H:%M:%S’,time.localtime(mtime)))    	# 转换为日期时间

13. getmtime()方法——获取最后一次修改路径的时间

getmtime() 方法用于获取最后一次修改路径的时间。语法格式如下:

os.path.getmtime(path)

参数说明:

  • path:表示要获取的最后一次修改时间的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:返回从纪元开始到最后一次修改该路径的秒数,值为浮点数。

使用getmtime() 方法获取指定目录的最后修改时间并输出,由于输出值为秒数,不容易看出具体时间,所以再应用time 模块将秒数转换为日期时间,代码如下:

import time                                                  		# 导入时间模块

import os.path                                            			# 导入os.path模块

mtime = os.path.getmtime(r’E:/mr/test’)                      		# 获取路径最后一次修改时间

print(mtime)                                                 		# 打印秒数

print(time.strftime(%Y-%m-%d %H:%M:%S’,time.localtime(mtime)))    	# 转换为日期时间

14. getctime()方法——获取路径的ctime

getctime() 方法用于获取路径的ctime。这里的ctime 由于操作系统的不同,代表的意思也不同。例如,在Unix 系统中它的含义为最后一次元数据更改的时间;在Windows 系统中它的含义则是创建时间。语法格式如下:

os.path.getctime(path)

参数说明:

  • path:表示获取的最后一次修改时间或创建时间的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:返回从纪元开始到创建或最后一次更改该路径的秒数,值为浮点数。

在Windows 系统中,获取指定目录的创建时间并输出。由于输出值为秒数,不容易看出具体时间,所以再应用time 模块将秒数转换为日期时间,代码如下:

import time                                		# 导入时间模块

import os.path                              	# 导入os.path模块

ctime = os.path.getctime(r’E:/mr/test’)        	# 获取路径的创建时间

print(ctime)                               		# 打印秒数

print(time.strftime(%Y-%m-%d %H:%M:%S’,time.localtime(ctime))) 		# 转换为日期时间

15. getsize()方法——获取路径的大小

getsize() 方法用于获取路径(目录或者文件)的大小(以字节为单位)。如果路径不存在或者无法访问,则抛出OSError 异常。语法格式如下:

os.path.getsize(path)

参数说明:

  • path:表示要获取大小的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:返回路径的大小,以字节为单位。如果指定的path 为文件,则返回该文件的大小;如果path 为目录,则返回描述该目录信息的文件的大小(例如,在Windows 10 系统中,获取某个目录的大小可能得到4096),并不是目录下全部文件的大小。

使用getsize() 方法获取“E:/mr/test/pdf/list.docx”文件的大小,代码如下:

import os.path 													# 导入os.path模块

print(os.path.getsize(r’E:/mr/test/pdf/list.docx’),’字节') 		# 打印文件的大小

16. isabs()方法——判断是否为绝对路径

isabs() 方法用于判断路径是否为绝对路径。语法格式如下:

os.path.isabs(path)

参数说明:

  • path:表示要判断的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:如果给定的路径是绝对路径,则返回True,否则返回False。

说明:在Unix 系统中,将以斜杠开头的路径视为绝对路径;而在Windows 系统中,以去除驱动器号后的(反向)斜线开头的视为绝对路径。

使用isabs() 方法分别判断两个文件的路径是否为绝对路径,代码如下:

import os.path                                 			# 导入os.path模块

print(os.path.isabs(r’demo\message.txt’))         		# 判断是否为绝对路径

print(os.path.isabs(r’E:/mr/test/pdf/list.docx’))   	# 判断是否为绝对路径

17. isf ile()方法——判断是否为普通文件

isfile() 方法用于判断是否为普通文件。语法格式如下:

os.path.isfile(path)

参数说明:

  • path:表示要判断的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:如果给定的路径对应的文件是普通文件,则返回True,否则返回False。

向isfile() 方法中传入一个绝对路径,判断该文件是否为普通文件,代码如下:

import os.path                                 			# 导入os.path模块

print(os.path.isfile(r’E:/mr/test/pdf/list.docx’)) 		# 判断是否为普通文件

18. isdir()方法——判断是否为目录

isdir() 方法用于判断指定的路径是否为目录。语法格式如下:

os.path.isdir(path)

参数说明:

  • path:表示要判断的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:如果给定的路径是目录,则返回True,否则返回False。

向isdir() 方法中传入绝对路径,判断该路径是否为目录,代码如下:

import os.path                                 			# 导入os.path模块

print(os.path.isdir(r’E:/mr/test/pdf’))            		# 判断是否为目录

print(os.path.isdir(r’E:/mr/test/pdf/list.docx’))   	# 判断是否为目录

19. islink()方法——判断指定目录是否为符号链接

islink() 方法用于判断指定的目录是否为符号链接(也称为软链接)。如果使用的Python 运行时不支持符号链接,则总是返回False。语法格式如下:

os.path.islink(path)

参数说明:

  • path:表示要判断的路径。

  • 返回值:如果给定的路径为符号链接,并且Python 运行时支持符号链接,则返回True,否则返回False。

使用islink() 方法判断一个路径是否为软链接,代码如下:

import os.path                   			# 导入os.path模块

print(os.path.islink(/tmp/mr’))    		# 判断是否为软链接

20. ismount()方法——判断是否为挂载点

ismount() 方法用于判断一个路径是否为挂载点。语法格式如下:

os.path.ismount(path)

参数说明:

  • path:表示要判断的路径。

  • 返回值:如果给定的路径是挂载点,则返回True,否则返回False。在Windows 系统中,驱动器盘符根目录和共享UNC 始终是挂载点。

使用ismount() 方法判断C 盘根目录是否为挂载点,代码如下:

import os.path                   			# 导入os.path模块

print(os.path. ismount(r’C:/))     		# 判断是否为挂载点

21. join()方法——拼接路径

join() 方法用于将两个或者多个路径拼接到一起组成一个新的路径。语法格式如下:

os.path.join(path, *paths)

参数说明:

  • path:表示要拼接的文件路径。

  • *paths:表示要拼接的多个文件路径,这些路径间使用逗号进行分隔。如果在要拼接的路径中,没有一个绝对路径,那么最后拼接出来的将是一个相对路径。

  • 返回值:拼接后的路径。

说明:使用os.path.join() 函数拼接路径时,并不会检测该路径是否真实存在。

使用join() 方法将绝对路径“E:\program\Python\Code”和相对路径“demo\hello.py”拼接到一起,代码如下:

import os.path                                            			# 导入os.path模块

print(os.path.join(“E:\program\Python\Code”,”demo\hello.py”))   	# 拼接字符串

程序运行结果如下:

E:\program\Python\Code\demo\hello.py

如果要拼接的路径中,存在多个绝对路径,那么按从左到右顺序,以最后一次出现的绝对路径为准,并且该路径之前的参数都将被忽略,代码如下:

import os.path                                            				# 导入os.path模块

print(os.path.join(‘E:/ code’,’E:/python/mr’,’Code’,’C:/,’demo’)) 		# 拼接字符串

22. normcase()方法——规范化路径名称的大小写

normcase() 方法用于规范化路径名称的大小写。语法格式如下:

os.path.normcase(path)

参数说明:

  • path:表示要规范的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:返回规范后的路径。在Windows 系统中,将路径名称中的所有字符转换为小写形式,并将正斜杠“/”转换为反斜杠“\”;在不区分大小写的操作系统中,返回原路径。

在进行拼接路径后,可能会出现分隔符和字母大小写形式不统一的问题,使用normcase() 方法将其统一,代码如下:

import os.path                                               			# 导入os.path模块

joinpath = os.path.join(r’E:/PROGRAM/PYTHON/CODE’,r’demo\hello.py’) 	# 拼接字符串

print(‘拼接后的路径:',joinpath)

print(‘规范后的路径:',os.path.normcase(joinpath))                 		# 打印规范路径

23. normpath()方法——规范路径名称

normpath() 方法用于规范路径名称。该方法的实现主要通过折叠冗余分隔符和上一级引用两种方式来规范路径名,例如,将A//B、A/B/、A/./B 和A/foo/…/B 都转换为A/B。该操作可能会更改包含符号链接的路径的本来含义。在Windows 系统中,它将正斜杠转换为反斜杠。语法格式如下:

os.path.normpath(path)

参数说明:

  • path:表示要规范的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:返回规范后的路径。

在进行拼接路径后,可能会出现分隔符不统一的问题,本锦囊将使用os.path.normpath() 方法将其统一,代码如下:

import os.path                                                   		# 导入os.path模块

joinpath = os.path.join(r’E:/program/Python/Code’,r’demo\\hello.py’)    # 拼接字符串

print(‘拼接后的路径:',joinpath)

print(‘规范后的路径:',os.path.normpath(joinpath))                     	# 打印规范路径

24. realpath()方法——获取实际路径

realpath() 方法用于返回指定路径的实际路径。当操作系统支持符号链接时,还会去掉路径中遇到的任何符号链接。语法格式如下:

os.path.realpath(path)

参数说明:

  • path:表示具体的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:如果给定的路径存在,则返回True,否则返回False。

说明:realpath() 方法在获取实际路径时,并不会检查路径是否真实存在,只是把当前文件目录与realpath() 方法给定的路径进行拼接。

当前Python 文件保存在计算机的桌面上,并且在它的同级目录中,包含一个名称为temp.py 的文件。通过os.path.realpath() 方法获取temp.py 文件的实际路径,代码如下:

import os.path                   		# 导入os.path模块

print(os.path.realpath(r’temp.py’)) 	# 获取文件的实际路径

程序运行结果如下:

C:\Users\Administrator\Desktop\temp.py

说明:os.path 模块的abspath() 方法与realpath() 方法的区别是,在支持符号链接的系统中,abspath() 方法不处理符号链接,而realpath() 方法则先处理路径中的符号链接,再返回绝对路径。

25. relpath()方法——计算相对路径

relpath() 方法用于返回从当前工作目录到指定目录的相对路径。语法格式如下:

os.path.relpath(path, start=os.curdir)

参数说明:

  • path:表示要计算的路径,可以采用绝对路径,也可以采用相对路径。当采用绝对路径时,需要与当前工作目录在同一磁盘驱动器上。

  • start:可选参数,默认值为os.curdir(当前工作目录)。参数值可以直接使用字符串指定从哪里开始计算相对路径。

  • 返回值:返回从当前工作目录到指定目录的相对路径。

说明:使用relpath() 方法计算相对路径时,并不访问文件系统以确定路径是否真实存在。

当前工作路径为操作系统的桌面(C:/Users/Administrator/Desktop/),计算路径“C:/Users/Administrator/dist”到当前工作路径间的相对路径,代码如下:

import os.path                                                   			# 导入os.path模块

print(os.path.relpath(r’C:/Users/Administrator/dist’))                		# 计算相对路径

print(os.path.relpath(r’C:/Users/Administrator/dist’,’Administrator’))   	# 计算相对路径

程序运行结果如下:

..\dist

..\..\dist

说明:在相对路径中,“…\”表示当前路径的上一级。

26. samef ile()方法——比较两个路径是否相同

samefile() 方法用于比较两个路径是否为同一个文件或目录。语法格式如下:

os.path.samefile(path1, path2)

参数说明:

  • path1:表示路径1,可以采用绝对路径,也可以采用相对路径。

  • path2:表示路径2,可以采用绝对路径,也可以采用相对路径。

  • 返回值:如果路径1 和路径2 为同一个文件或目录,则返回True,否则返回False。

使用samefile() 方法比较一个通过绝对路径指定的路径和一个通过相对路径指定的路径是否为同一个目录,代码如下:

import os.path 														# 导入os.path模块

print(os.path.samefile(r’C:/Users/Administrator/dist’,../dist’))	# 比较两个路径是否相同

27. sameopenf ile()方法——比较两个打开的 文件描述符对象是否为同一个文件

sameopenfile() 方法用于比较两个打开的文件描述符对象是否为同一个文件。语法格式如下:

os.path.sameopenfile(fp1, fp2)

参数说明:

  • fp1 :表示打开的文件描述符对象,可以通过os.open() 方法或者open().fileno()方法创建。

  • fp2 :表示打开的文件描述符对象,可以通过os.open() 方法或者open().fileno()方法创建。

  • 返回值:如果两个文件描述符对象为同一个文件,则返回True,否则返回False。

采用不同方法打开同一个文件的文件描述符对象,并且使用sameopenfile() 方法比较两个文件描述符对象是否指向同一个文件,代码如下:

import os.path                              		# 导入os.path模块

fp1 = open(r’test.txt’,’r’).fileno()            	# 第一个文件描述符对象

fp2 = os.open(r’test.txt’,os.O_RDONLY)         		# 第二个文件描述符对象

print(os.path.sameopenfile(fp1,fp2))          		# 判断两个文件对象是否为同一个文件

28. samestat()方法——判断两个stat元组是否指向同一个文件

samestat() 方法用于判断两个文件信息元组是否指向同一个文件。语法格式如下:

os.path.samestat(stat1, stat2)

参数说明:

  • stat1:表示文件信息元组,可以通过os.stat()方法获取。

  • stat2:表示文件信息元组,可以通过os.stat()方法获取。

  • 返回值:如果给定的路径存在,则返回True,否则返回False。

使用samestat() 方法判断两个文件信息元组是否指向同一个文件,代码如下:

import os.path 											# 导入os.path模块

path = r’test.txt’ 										# 文件路径

stat1 = os.stat(path) 									# 第一个stat元组

stat2 = os.stat(os.open(path,os.O_RDONLY)) 				# 第二个stat元组

print(os.path.samestat(stat1,stat2))		 			# 判断两个stat元组是否为同一个文件

stat3 = os.stat(os.open(r’temp.py’,os.O_RDONLY)) 		# 第三个stat元组

print(os.path.samestat(stat1,stat3)) 					# 判断两个stat元组是否为同一个文件

29. split()方法——分割路径名

split() 方法用于从一个路径中分割出目录和文件名。语法格式如下:

os.path.split(path)

参数说明:

  • path:表示要分割的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:返回一个元组,与(os.path.dirname(),os.path.basename()) 返回的元组相同。如果指定的是一个相对路径,并且以斜杠结尾,则返回的元组的第二个元素为空。

使用split() 方法分别分割绝对路径(包括文件名)、绝对路径(不包括文件名)和相对路径(不包括文件名),代码如下:

import os.path                                     		# 导入os.path模块

print(os.path.split(r’E:/mr/test/pdf/list.docx’))      	# 分割绝对路径

print(os.path.split(r’E:/mr/test/pdf/))              	# 分割绝对路径

print(os.path.split(r’/test/pdf/list))               	# 分割相对路径

30. splitdrive()方法——分割驱动器和目录

splitdrive() 方法用于从一个路径中分割驱动器和目录,在不使用驱动器的操作系统中,返回元组的第一个元素始终为空字符串。语法格式如下:

os.path.splitdrive(path)

参数说明:

  • path:表示要分割的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:返回一个元组,它的第一个元素为字符串表示的驱动器名,第二个元素为字符串表示的目录。如果指定的路径为相对路径,则返回元组的第一个元素为空字符串。

使用splitdrive() 方法分别分割绝对路径和相对路径获得驱动器和目录,代码如下:

import os.path                                        		# 导入os.path模块

print(os.path.splitdrive(r’E:/mr/test/pdf/list.docx’))     	# 分割绝对路径

print(os.path.splitdrive(r’/test/pdf/list.docx’))          	# 分割相对路径

31. splitext()方法——分割文件名和扩展名

splitext() 方法用于从一个路径中分割基本文件名和扩展名。语法格式如下:

os.path.splitext(path)

参数说明:

  • path:表示要分割的路径,可以采用绝对路径,也可以采用相对路径。

  • 返回值:返回一个元组,它的第一个元素为字符串表示的基本文件名(路径中除扩展名以外的部分),第二个元素为字符串表示的扩展名(包括“.”号)。如果指定的路径中不包括扩展名,则返回元组的第二个元素为空字符串。

使用splitext() 方法分别分割绝对路径和相对路径获得文件名和扩展名,代码如下:

import os.path                                        		# 导入os.path模块

print(os.path.splitext(r’E:/mr/test/pdf/list.docx’))       	# 分割绝对路径

print(os.path.splitext(r’E:/mr/test/pdf/))               	# 分割没有文件名的绝对路径

print(os.path.splitext(r’mr/mot_cn.txt’))                 	# 分割相对路径

程序运行结果如下:

('E:/mr/test/pdf/list', '.docx')

('E:/mr/test/pdf/', '')

('mr/mot_cn', '.txt')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第十章 os.path模块 的相关文章

  • 2d 图像点和 3d 网格之间的交点

    Given 网格 源相机 我有内在和外在参数 图像坐标 2d Output 3D 点 是从相机中心发出的光线穿过图像平面上的 2d 点与网格的交点 我试图找到网格上的 3d 点 This is the process From Multip
  • Tkinter 菜单删除项

    如何删除任何菜单项 例如我想删除 播放 self menubar Menu self root self root config menu self menubar self filemenu2 Menu self menubar self
  • 从字典的元素创建 Pandas 数据框

    我正在尝试从字典创建一个 pandas 数据框 字典设置为 nvalues y1 1 2 3 4 y2 5 6 7 8 y3 a b c d 我希望数据框仅包含 y1 and y2 到目前为止我可以使用 df pd DataFrame fr
  • 定义Python源代码编码的正确方法

    PEP 263 http www python org dev peps pep 0263 定义如何声明Python源代码编码 通常 Python 文件的前两行应以以下内容开头 usr bin python coding
  • 如何为未捕获的异常处理程序编写单元测试

    我有一个函数可以捕获uncaught例外情况 如下 有没有办法编写一个单元测试来执行uncaught exception handler 功能正常 但测试正常退出 import logging def config logger logge
  • 数据框 - 平均列

    我在 pandas 中有以下数据框 Column 1 Column 2 Column3 Column 4 2 2 2 4 1 2 2 3 我正在创建一个数据框 其中包含第 1 列和第 2 列 第 3 列和第 4 列等的平均值 ColumnA
  • python array(10,1) 和 array(10,) 之间的区别

    我正在尝试将 MNIST 数据集加载到数组中 当我使用 X train y train X test y test mnist load data 我得到一个数组 y test 10000 但我希望它的形状为 10000 1 数组 1000
  • 检查 python 中命令行参数的数量

    我是蟒蛇新手 还是把脚弄湿了 我正在尝试做这样的事情 import sys if len sys argv lt 3 or lt len sys argv gt 3 print This script will compare two fi
  • 从 pyspark.sql 中的列表创建数据框

    我完全陷入了有线的境地 现在我有一个清单li li example data map lambda x get labeled prediction w x collect print li type li 输出就像 0 0 59 0 0
  • 是否有一个包可以维护所有带有符号的货币列表?

    是否有一个 python 包提供所有 或相当完整 货币的列表与符号 如美元的 有优秀的pycountry 贪财的 https github com limist py moneyed and ccy http code google com
  • 如何使用 Homebrew 在 Mac 上安装 Python 2 和 3?

    我需要能够在 Python 2 和 3 之间来回切换 我如何使用 Homebrew 来做到这一点 因为我不想弄乱路径并陷入麻烦 现在我已经通过 Homebrew 安装了 2 7 我会用pyenv https github com yyuu
  • 更改QLineEdit的ClearButton图标

    我想在Windows 10 1909 64位 上的Python 3 8和PyQt5 5 15 0 上更改我的QLineEdit的ClearButton图标 稍后我想在Linux上运行代码 我尝试应用此处找到的代码 如何在 QLineEdit
  • Python“非规范化”unicode 组合字符

    我正在寻找标准化 python 中的一些 unicode 文本 我想知道是否有一种简单的方法可以在 python 中获得组合 unicode 字符的 非规范化 形式 例如如果我有序列u o xaf i e latin small lette
  • 如何在 Seaborn 中的热图轴上表达类

    我使用 Seaborn 创建了一个非常简单的热图 显示相似性方阵 这是我使用的一行代码 sns heatmap sim mat linewidths 0 square True robust True sns plt show 这是我得到的
  • 如何从列表类别中对 pandas 数据框进行排序?

    所以我在下面有这个数据集 我想根据我的列表从 名称 列进行排序 以及按 A 升序和按 B 降序排序 import pandas as pd import numpy as np df1 pd DataFrame from items A 1
  • 根据多个阈值将 SciPy 分层树状图切割成簇

    我想将 SciPy 的树状图切割成多个具有多个阈值的簇 我尝试过使用 fcluster 但它只能削减一个阈值 例如 这是我从另一个问题中摘取的一段代码 import pandas data pandas DataFrame total ru
  • 仅允许正小数

    在我的 Django 模型中 我创建了一个如下所示的小数字段 price models DecimalField u Price decimal places 2 max digits 12 显然 价格为负或零是没有意义的 有没有办法将小数
  • 在 numpy 中连接维度

    我有x 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 2 3 I want 1 2 3 4 5 6 7 8 9 10 11 12 shape 2 6 也就是说 我想连接中间维度的所有项目 在这种特殊情况下我可以得到这
  • Python 中的 Unix cat 函数 (cat * > merged.txt)? [复制]

    这个问题在这里已经有答案了 一旦建立了目录 有没有办法在Python中使用Unix中的cat函数或类似的函数 我想将 files 1 3 合并到 merged txt 我通常会在 Unix 中找到该目录 然后运行 cat gt merged
  • 如何通过点击复制 folium 地图上的标记位置?

    I am able to print the location of a given marker on the map using folium plugins MousePosition class GeoMap def update

随机推荐

  • conda 创建、激活、查看、删除env

    conda 创建 激活 查看 删除env Anaconda能够帮助我们在系统中配置python环境 该环境独立于系统配置 可以配置不同版本的python包 比如我们想要使用不同版本的python来运行程序 可以创建不同的conda环境来将不
  • Centos7安装elasticsearch及kibana并进行安全设置

    Centos7安装elasticsearch及kibana并进行安全设置 每天多学一点点 话不多说 这就开始吧 文章目录 Centos7安装elasticsearch及kibana并进行安全设置 1 前言 2 环境要求 3 安装elasti
  • 超分辨率数据集(待填坑版)

    超分辨率数据集 待填坑版 数据集来源 Super Resolution 超分辨率 DIV2K Urban100 BSD Berkeley Segmentation Dataset EarVN1 0 TextZoom Cardiac supe
  • 干了六年Android开发现在裸辞失业了,再过2个月就30了,该怎么继续生活?

    这是我在某论坛看到别人分享的故事 觉得可以展开聊一下 对于我们这些中年程序员 可以裸辞吗 前言 首先介绍一下主人公的情况 目前所在的是一家小的创业公司 待了3年多 薪资一般吧 之前在一家中型上市企业也干了三年 因为想涨薪所以跳到现在这家小公
  • 【数据结构】KMP算法

    算法简介 传统暴力算法和KMP算法 设定主串的长度为n 字串的的长度为m 传统的暴力字符串匹配算法理论上最多需要花费O nm 的时间复杂度才能完成串的匹配操作 但是在实际使用中 往往也能够以接近O m n 的时间复杂的完成匹配操作 因此现在
  • 【js】JSON.stringify 语法实例讲解

    语法 JSON stringify value replacer space value 是必选字段 就是你输入的对象 比如数组 类等 replacer 这个是可选的 它又分为2种方式 一种是数组 第二种是方法 情况一 replacer为数
  • Tcp建立连接为什么需要三次握手

    前言 众所周知tcp传输层协议在建立连接的时候需要三次才能建立起一个真正的可靠连接 可是为什么是三次呢 不可以是两次 四次等等呢 可以自己思考一番 带着疑问可以看下文 三次握手 在 计算机网络 一书中其中有提到 三次握手的目的是 为了防止已
  • 逐步视频讲解--用Tensorflow进行中文自然语言处理--情感分析

    本教程为原创 转载请注明教学视频地址 视频教程链接 https www bilibili com video av30543613 书面教程和代码链接 https github com aespresso chinese sentiment
  • 王者荣耀8月15日服务器维护,王者荣耀8月15日更新维护到什么时候 王者荣耀8月15日更新时间分享...

    王者荣耀 5V5英雄公平对战手游 腾讯最新MOBA大作 5V5 3v3 1v1 多样模式一键体验 海量英雄随心选择 10秒实时跨区匹配 与好友组队 类型 动作冒险 大小 792 06M 语言 简体中文 在王者荣耀8月15日更新到什么时候呢
  • BAT54C 二极管是如何工作的?

    这是一个多电源供电的电路 Vcc是正常供电电源 如5V 由市电变换得到 电压大于 Vcc1 Vf 正常供电时二极管不导通 Vcc1是电池供电电源 当Vcc撤掉时 DD1 上边的二极管 导通 由Vcc1供电 当电池Vcc1耗尽或更换电池时 V
  • openwrt上opkg更新报错"opkg_download: Failed to download ............."

    开始搞op的时候 看到op竟然可以直接安装一些插件 激动坏了 因为这东西对嵌入式的小系统来说简直不敢想 但是op就支持了 就是这么任性 好不容易编译了固件 按照网上的教程 telnet进去 首先opkg update 结果没有想象中的华丽更
  • 聚类算法(二)--层次聚类法

    本文主要介绍层次聚类法的基本原理 距离计算方法 算法的优缺点 以及R语言实战 一 概述 层次聚类 Hierarchical Clustering 试图在不同层次上对数据集进行划分 从而形成树形的聚类结构 数据集的划分可采用 自底向上 的聚合
  • CUDA编程学习0——环境搭建&环境详解

    目录 环境配置 软件安装 1 支持最高的cuda版本查询 下载cuda开发软件 3 配置环境 bashrc添加环境变量 4 后续维护查询 补 关于windows下的cuda环境配置 一 Visual Studio 2022 CUDA 11
  • java,html5+css3以及javascript面试题------自己面试的时候遇到的面试题,所以整理一下

    1 java部分 1 线程与进程的区别 一个程序至少有一个进程 一个进程至少有一个线程 线程的划分尺度小于进程 使得多线程程序的并发性高 另外 进程在执行过程中拥有独立的内存单元 而多个线程共享内存 从而极大地提高了程序的运行效率 线程在执
  • matlab 计算结果为nan,matlab 计算 结果总是为Nan

    本人刚刚接触matlab 对这些运算不是很懂 计算ni的位置 exp E g 2 k T eps 这个值之前一直是0 加了eps后就有结果显示了 后面部分exp alfa T 2 k T beita 一直为无穷大然后结果就为Nan 不知道怎
  • UIKeyboard键盘相关知识点-IOS开发

    一 键盘风格 UIKit框架支持8种风格键盘 java view plain copy print typedef enum UIKeyboardTypeDefault 默认键盘 支持所有字符 UIKeyboardTypeASCIICapa
  • 08.animation-----05.旋转

    1 旋转是将元素沿着x y z轴以指定的角度旋转 旋转方向为顺时针 单位可以为deg也可为turn 2 旋转也是使用transform标签 使用以下函数 rotatex 使元素沿着x轴旋转 rotatey 使元素沿着y轴旋转 rotatez
  • 微信小程序-天气预报案例之和风天气API-云开发版

    小程序 天气预报 在现实生活中是非常常用的 我们平时都可以通过自己的手机上面或网上进行查看天气等等 鉴于有些小伙伴对云开发不熟悉 学习请移步到我的另外一篇文章 天气预报之和风天气 简易版 这个demo可以应用到自己的小程序模块上 前期准备
  • 面试华为软件测试岗,收到offer后我却毫不犹豫拒绝了....

    我大学学的是计算机专业 毕业的时候 对于找工作比较迷茫 也不知道当时怎么想的 一头就扎进了一家外包公司 一干就是2年 我想说的是 但凡有点机会 千万别去外包 在深思熟虑过后 决定要提升自己 也发现自己身边的人都是在大厂上班 也听他们说了大厂
  • 第十章 os.path模块

    1 os path模块介绍 os 模块是Python 内置的与操作系统功能和文件系统相关的模块 该模块的子模块os path 是专门用于进行路径操作的模块 常用的路径操作主要有判断目录是否存在 创建目录 删除目录和遍历目录等 说明 在使用o