Python 文件属性获取之 os.path 模块

导读:本篇文章讲解 Python 文件属性获取之 os.path 模块,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

目录

1、路径相关

os.path.abspath(path)

os.path.normpath(path)

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

os.path.dirname(path) 

os.path.basename(path) 

os.path.split(path) 

os.path.join(path1[, path2[, …]])

2、时间相关

os.path.getatime(path) 

os.path.getmtime(path) 

os.path.getctime(path)

3、判断相关

os.path.exists(path)

os.path.isabs(path)

os.path.isfile(path) 

os.path.isdir(path) 

4、其他

os.path.getsize(path) 


        作为居民,我们每个人都有自己的 ID,记录我们的姓名,性别,出生日期,户籍地等信息,一定程度而言,这些信息就是我们的个人属性,获取这些属性就可以知悉我们的个人信息。作为存储在物理空间里的文件,自其诞生那一刻起,同样被赋予若干独特的属性,如文件名,扩展名,存放路径,创建和修改时间等,如何才能精准获取这些属性呢?

        Python 标准库之 os 模块 提供了 os.path 这个功能强大的子模块,可以轻松获取文件的上述属性。当然,随着Python的迭代,该子模块渐有被 pathlib2 标准库取代之趋势。

        os.path 子库以 path 为入口,用于操作和处理文件路径,其常用命令如下:

        (为方便起见,本文以存放于文档的文件 test.py 为例,其完整路径为 /home/probobo/Documents/test.py。)

 

1、路径相关

os.path.abspath(path)

        返回 path 在当前系统中的绝对路径。

>>> import os
>>> os.path.abspath('test.py')
'/home/probobo/test.py'

        问题来了,您会发现所得并非所求,结果显示的并非文件 test.py 的绝对路径。这主要源于该命令显示的绝对路径实际为当前工作目录的绝对路径,也即 os.path.abspath() 结果取决于os.getcwd():

>>> os.getcwd()
'/home/probobo'

        如果 test.py 为当前项目,则 os.path.abspath() 可完美显示其绝对路径:

>>> import os
>>> os.path.abspath('test.py')
'/home/probobo/Documents/test.py'
>>> os.getcwd()
'/home/probobo/Documents'

os.path.normpath(path)

        归一化 path 的表示形式,期间所有冗余分隔符和up-level引用均折叠。Linux 系统统一用斜杠(/)分割路径,Windows系统则统一用双反斜杠(\\)。

>>> os.path.normpath('/home//probobo/./Documents/test.py')
'/home/probobo/Documents/test.py'

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

        返回 path 与当前工作目录之间的相对路径

import os 

path = '/home/probobo/Documents/test.py'

relative_path = os.path.relpath(path)
print(relative_path) 

start = '/home/probobo'
relative_path = os.path.relpath(path, start)
print(relative_path)

start = '/home'
relative_path = os.path.relpath(path, start)
print(relative_path)

start = path
relative_path = os.path.relpath(path, start) 
print(relative_path)

start = '/home/probobo/Downloads/d/1.txt'
relative_path = os.path.relpath(path, start) 
print(relative_path) 

        输出结果:

test.py
Documents/test.py
probobo/Documents/test.py
.
../../../Documents/test.py
>>> 

os.path.dirname(path) 

        返回文件路径

>>> os.path.dirname('/home/probobo/Documents/test.py')
'/home/probobo/Documents'

os.path.basename(path) 

        返回文件名

>>> os.path.basename('/home/probobo/Documents/test.py')
'test.py'

os.path.split(path) 

        把路径分割成 dirname 和 basename,返回一个元组

>>> os.path.split('/home/probobo/Documents/test.py')
('/home/probobo/Documents', 'test.py')

os.path.join(path1[, path2[, …]])

        把目录和文件名组合为一个路径

>>> os.path.join('/','home','probobo','Documents','test.py')
'/home/probobo/Documents/test.py'

2、时间相关

os.path.getatime(path) 

        返回 path 对应的文件或目录最近访问时间(浮点型秒数)

>>> os.path.getatime('/home/probobo/Documents')
1645434030.3635492

os.path.getmtime(path) 

        返回 path 对应的文件或目录最近修改时间

>>> os.path.getmtime('/home/probobo/Documents/test.py')
1645511698.5759156

os.path.getctime(path)

        返回 path 对应的文件或目录创建时间

>>> os.path.getctime('/home/probobo/Documents/test.py')
1645511698.5759156

        上述浮点时间均可以通过调用 time 库来输出标准时间。

>>> import time
>>> time.ctime(os.path.getctime('/home/probobo/Documents/test.py'))
'Tue Feb 22 14:34:58 2022'

3、判断相关

os.path.exists(path)

        判断 path 对应的文件或目录是否存在,返回 True 或 False。

>>> os.path.exists('/home/probobo/Documents/test.py')    #指定路径
True
>>> os.path.exists('test.py')    #当前目录
False

os.path.isabs(path)

        判断是否为绝对路径,返回 True 或 False。

>>> os.path.isabs('/home/probobo/Documents/test.py')
True
>>> os.path.isabs('test.py')
False

os.path.isfile(path) 

        判断 path 所对应的文件是否存在,返回 True 或 False。

>>> os.path.isfile('/home/probobo/Documents/test.py')
True
>>> os.path.isfile('test.py')
False

os.path.isdir(path) 

        判断 path 所对应的目录是否存在,返回 True 或 False。

>>> os.path.isdir('/home/probobo/Documents')
True
>>> os.path.isdir('Documents')
False

4、其他

os.path.getsize(path) 

        返回文件大小,若文件不存在则返回错误 FileNotFoundError: [Errno 2]

>>> os.path.getsize('/home/probobo/Documents/test.py')
480

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/106945.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!