os
模块下的path
子模块主要用来获取文件的属性。下面列举一些常用的方法。
-
os.path.abspath(path)
返回path
的绝对路径。在类Unix操作系统下,使用这个方法总是能返回一个路径的绝对路径,而且这个绝对路径是真实存在的,但是在windows平台下,这个方法的返回值与当前所在的驱动器有关。即返回值为驱动器号加上
path
相对于当前驱动器的根目录的绝对路径。通过下面的例子应该就能看明白了:>>> os.chdir('c:\\') >>> os.getcwd() 'c:\\' >>> home_path = os.getenv('HOMEPATH') >>> home_path '\\Users\\Neo Chen' >>> os.path.abspath(home_path) 'c:\\Users\\Neo Chen' >>> os.chdir('D:\\') >>> os.getcwd() 'D:\\' >>> os.path.abspath(home_path) 'D:\\Users\\Neo Chen'
-
os.path.exists(path)
判断path
指向的文件是否存在。若
path
指向的文件存在,返回True
,否则返回False
。注意:当
path
指向的是一个软链接时,若这个软链接指向的文件已经被删除,将返回False
。 -
os.path.lexists(path)
判断path
指向的文件是否是存在。与
os.path.exists(path)
相似,但不同的是,当path
指向的文件是一个软链接时,无论该软链接指向的文件是否已经被删除,均返回True
。 -
os.path.basename(path)
返回path
指向的文件的文件名。若
path
指向的是一个目录,则返回一个空字符串。>>> os.path.basename('p1/c1/1.txt') '1.txt' >>> os.path.basename('p1/c1') ''
-
os.path.dirname(path)
返回path
所指向的文件的路径名。>>> os.path.dirname('p1/c1/1.txt') 'p1/c1'
-
os.path.getsize(path)
返回path
所指向的文件的大小。 -
os.path.isabs(path)
判断path
是否为绝对路径。判断的依据是,只要
path
的首个字符是os.path.sep
的返回值,就返回True
,否则返回False
,即使path
是不存在的路径。>>> os.path.isabs('.') False >>> os.path.isabs(os.path.abspath('.')) True >>> os.path.isabs('/Users') True >>> os.path.isabs('/notExists') # 即使指定的路径不存在,只要首个字符是
-
os.path.isfile(path)
判断path
指向的是否为一般文件。若是,则返回
True
,若指向的文件不存在或者不是一个一般文件,则返回False
。>>> os.listdir() ['.DS_Store', 'hello_world.py', 'test'] >>> os.path.isfile('test') False >>> os.path.isfile('hello_world.py') True >>> os.path.isfile('notExist.txt') False >>> os.path.isfile('/dev/null') False
-
os.path.isdir(path)
判断path
指向的是否为一个目录。若是,则返回
True
,若指向的文件不存在或者不是一个目录,则返回False
。 -
os.path.islink(path)
判断path
指向的文件是否为软链接。若是,则返回
True
,若指向的文件不存在或者不是一个软链接,则返回False
。 -
os.path.ismount(path)
判断path
指向的文件是否为挂载点。若是,则返回
True
,若指向的文件不存在或者不是一个挂载点,则返回False
。>>> os.path.ismount('/') True >>> os.path.ismount('/Users') False
-
os.path.join(path1[, path2[,...]])
将路径和文件名合并成一个路径。>>> os.path.join('/', 'Users', 'user1', '2.txt') '/Users/user1/2.txt'
-
os.path.realpath(path)
返回path
所表示的真实路径。>>> os.path.realpath('.') '/Users/user1' >>> os.path.realpath('..') '/Users'
-
os.path.split(path)
将path
指向的文件分割为包含dirname
和basename
的元组。>>> os.path.split('project/src/hello_world.py') ('project/src/', 'hello_world.py')
-
os.path.splitext(path)
将path
分割为包含路径名和文件拓展名的元组。>>> os.path.splitext('project/src/hello_world.py') ('project/src/hello_world', '.py')
-
os.path.expandvars(path)
使用环境变量的值替换path
中的$name
或${name}
>>> os.path.expandvars('$LANG') 'zh_CN.UTF-8'
-
os.path.expanduser(path)
将路径中的~
替换成实际的路径。>>> os.path.expanduser('~/StudyWP') /Users/tester1/StudyWP'
-
os.path.samefile(path1, path2)
判断path1
和path2
指向的是否是同一个文件。一个文件的软链接、硬链接以及这个文件本身,都被当作同一个文件。
>>> os.listdir() ['test.py', 'test'] >>> os.system('cp test.py test1.py') 0 >>> os.link('test.py', 'test/hlink.py'). # 创建‘test.py’的硬链接 >>> os.symlink(os.path.abspath('test.py'), test.slink.py)。 # 创建‘test.py’的软链接 >>> os.system('ls test/*') test/hlink.py test/slink.py 0 >>> os.path.samefile('test.py', 'test.slink.py') # 判断原文件和其软链接是否引用同一个文件 True >>> os.path.samefile('test.py', 'test/hlink.py') # 判断原文件和其硬链接是否引用同一个文件 True >>> os.path.samefile('test/hlink.py', 'test/slink.py') # 判断原文件的软链接和硬链接是否引用同一个文件 True >>> os.path.samefile('test.py', 'test1.py') # 判断复制自‘test.py’ 的文件‘test1.py’ 是否为同一文件 False
-
os.path.sameopenfile(fd1, fd2)
测试两个打开的文件对象是否引用同一个文件fd1
和fd2
表示文件描述符。不需要fd1
和fd2
的值相等,只要他们引用同一个文件,则返回True
,否则返回False
。>>> os.listdir() ['test.py', 'test'] >>> os.system('cp test.py test1.py') 0 >>> os.link('test.py', 'test/hlink.py'). # 创建‘test.py’的硬链接 >>> os.symlink(os.path.abspath('test.py'), test.slink.py)。 # 创建‘test.py’的软链接 >>> os.system('ls test/*') test/hlink.py test/slink.py 0 >>> fd1 = os.open('test.py', os.O_RDONLY) >>> fd2 = os.open('test/hlink.py', os.O_RDONLY) >>> fd3 = os.open('test/slink.py', os.O_RDONLY) >>> fd4 = os.open('test1.py', os.O_RDONLY) >>> os.path.sameopenfile(fd1, fd2) True >>> os.path.sameoenfile(fd1, fd3) True >>> os.path.sameopenfile(fd2, fd3) True >>> os.path.sameopenfile(fd1, fd4) False
-
os.path.samestat(stat1, stat2)
判断两个stat
信息是否相同引用自同一个文件>>> os.listdir() ['test.py', 'test'] >>> os.system('cp test.py test1.py') 0 >>> os.link('test.py', 'test/hlink.py'). # 创建‘test.py’的硬链接 >>> os.symlink(os.path.abspath('test.py'), test.slink.py)。 # 创建‘test.py’的软链接 >>> os.system('ls test/*') test/hlink.py test/slink.py 0 >>> st1 = os.stat('test.py') >>> st2 = os.open('test/hlink.py') >>> st3 = os.open('test/slink.py') >>> st4 = os.open('test1.py') >>> os.path.samestat(st1, st2) True >>> os.path.samestat(st1, st3) True >>> os.path.samestat(st2, st3) True >>> os.path.samestat(st1, st4) False
-
os.path.normcase(path)
转换大小写和路径分隔符。类linux操作系统下将原样返回
path
,Windows操作系统下把path
中的/
替换为\\
,大写字母转变为小写字母。>>> os.path.normcase('/Users/test1/Desktop') '\\users\\test1\\desktop'
-
os.path.normpath(path)
规范path
中的字符串形式。 -
os.path.splitdrive(path)
分割驱动器号及路径,并返回包含驱动器号和路径的元组。注意:类linux操作系统下,返回的元组的第一个元素是空字符串,第二个元素是
os.path.normpath(path)
类linux操作系统下:
>>> os.path.splitdrive('C:\\Windows\system32') ('', 'C:\\windows\\system32')
Windows操作系统下:
>>> os.path.splitdrive('c:\\Windows\system32') ('c:', '\\windows\\system32')
-
os.path.relpath(path[, start])
计算从start
到path
的相对路径>>> os.path.relpath('/Users/tester1/StudyWP/test', '/Users/tester1') 'StudyWP/test' >>> os.path.relpath('/Users/tester1/StudyWP/test', '/Users') tester1/StudyWP/test
-
os.path.atime(path)
返回path指定的文件的最后访问时间。 -
os.path.mtime(path)
返回path指定的文件的最后修改时间。 -
os.path.ctime(path)
返回path指定的文件的创建时间。 -
os.path.sep
返回当前系统的路径分隔符。 -
os.path.pathsep
返回PATH
环境变量的分隔符。