如何访问文件状态

实际案例

在某些项目中,我们需要获得文件状态,例如:

  1. 文件的类型(普通文件、目录、符号链接和设备文件等);
  2. 文件的访问权限;
  3. 文件的最后访问、修改和节点状态更改时间;
  4. 普通文件的大小;
    ……

解决方案:
- 系统调用:标准库中os模块下的三个系统调用stat,fstat,lstat获取文件状态;
- 快捷函数:标准库中os.path下一些函数,使用起来更加简洁。

系统调用

# -*- coding: utf-8 -*-

import os
import stat
import time

s = os.stat('test.txt')

# 文件类型
print stat.S_ISREG(s.st_mode)

# 文件的执行权限
print s.st_mode & stat.S_IXUSR

# 文件的读权限
print s.st_mode & stat.S_IRUSR

# 文件的最后访问时间
print time.localtime(s.st_atime)

# 文件的最后修改时间
print time.localtime(s.st_mtime)

# 文件的节点状态更改时间
print time.localtime(s.st_ctime)

# 文件的大小
print s.st_size

其运行结果为:

True
0
256
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=21, tm_hour=20, tm_min=23, tm_sec=52, tm_wday=4, tm_yday=202, tm_isdst=0)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=21, tm_hour=20, tm_min=23, tm_sec=52, tm_wday=4, tm_yday=202, tm_isdst=0)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=21, tm_hour=20, tm_min=23, tm_sec=52, tm_wday=4, tm_yday=202, tm_isdst=0)
1769

快捷函数

# 文件的大小
print s.st_size

# 文件类型
print os.path.isfile('test.txt')

# 文件的最后访问时间
print time.localtime(os.path.getatime('test.txt'))

# 文件的最后修改时间
print time.localtime(os.path.getctime('test.txt'))

# 文件的节点状态更改时间
print time.localtime(os.path.getmtime('test.txt'))

# 文件的大小
print os.path.getsize('test.txt')

注:os.path下没有获取文件权限的函数,因此只能使用系统调用方法来获取文件权限。

其运行结果为:

True
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=21, tm_hour=20, tm_min=23, tm_sec=52, tm_wday=4, tm_yday=202, tm_isdst=0)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=21, tm_hour=20, tm_min=23, tm_sec=52, tm_wday=4, tm_yday=202, tm_isdst=0)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=21, tm_hour=20, tm_min=23, tm_sec=52, tm_wday=4, tm_yday=202, tm_isdst=0)
1769
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值