Python3 获取文件属性(时间、大小等)

本文深入解析os.stat()函数,详细介绍了其参数与返回值,包括inode保护模式、inode节点号、设备标识、链接数、用户ID、组ID、文件大小、访问时间、修改时间及创建时间等属性,并通过实例演示如何获取文件信息并转换时间戳。

os.stat(path) :
用于在给定的路径上执行一个系统 stat 的调用。
path:
指定路径
返回值:

  • st_mode: inode 保护模式
    -File mode: file type and file mode bits (permissions).
  • st_ino: inode 节点号。
    -Platform dependent, but if non-zero, uniquely identifies the file for a given value of st_dev.
    ——the inode number on Unix,
    ——the file index on Windows
  • st_dev: inode 驻留的设备。
    -Identifier of the device on which this file resides.
  • st_nlink:inode 的链接数。
    -Number of hard links.
  • st_uid: 所有者的用户ID。
    -User identifier of the file owner.
  • st_gid: 所有者的组ID。
    -Group identifier of the file owner.
  • st_size:普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
    -Size of the file in bytes, if it is a regular file or a symbolic link. The size of a symbolic link is the length of the pathname it contains, without a terminating null byte.
  • st_atime: 上次访问的时间。
    -Time of most recent access expressed in seconds.
  • st_mtime: 最后一次修改的时间。
    -Time of most recent content modification expressed in seconds.
  • st_ctime:由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。
  • st_atime_ns
    -Time of most recent access expressed in nanoseconds as an integer
  • st_mtime_ns
    -Time of most recent content modification expressed in nanoseconds as an integer.
  • st_ctime_ns
    -Platform dependent:
    ——the time of most recent metadata change on Unix,
    ——the time of creation on Windows, expressed in nanoseconds as an integer.

实例:

from os import stat
statinfo =stat(r'C:\Users\Administrator\Desktop\1\4D-A300.txt')
print (statinfo)#属性
print(statinfo.st_size) #大小字节
print('%.3f'%(statinfo.st_size/1024/1024))#大小M

输出结果:

os.stat_result(st_mode=33206, st_ino=3659174697378650, st_dev=3993776408, st_nlink=1, st_uid=0, st_gid=0, st_size=3876301, st_atime=1541032563, st_mtime=1541033475, st_ctime=1541032563)
3876301
3.697

我们看到,时间都是一些大的浮点数-时间戳(每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。)
从返回浮点数的时间辍方式向时间元组转换,只要将浮点数传递给如localtime之类的函数。

#-*- coding:utf-8 -*-  python3.6.3

from os import stat
import time
statinfo =stat(r'C:\Users\Administrator\Desktop\1\4D-A300.txt')
print (statinfo)
print(time.localtime(statinfo.st_atime))

输出为:

os.stat_result(st_mode=33206, st_ino=3659174697378650, st_dev=3993776408, st_nlink=1, st_uid=0, st_gid=0, st_size=3876301, st_atime=1541032563, st_mtime=1541033475, st_ctime=1541032563)
time.struct_time(tm_year=2018, tm_mon=11, tm_mday=1, tm_hour=8, tm_min=36, tm_sec=3, tm_wday=3, tm_yday=305, tm_isdst=0)

附:月份缩写 -_-||
在这里插入图片描述

time 模块的 strftime 方法来格式化日期

print (time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(statinfo.st_atime)))

结果:

2018-11-01 08:36:03

附:格式化符号

  • %y 两位数的年份表示(00-99)
  • %Y 四位数的年份表示(000-9999)
  • %m 月份(01-12)
  • %d 月内中的一天(0-31)
  • %H 24小时制小时数(0-23)
  • %I 12小时制小时数(01-12)
  • %M 分钟数(00=59)
  • %S 秒(00-59)
  • %a本地简化星期名称
  • %A 本地完整星期名称
  • %b 本地简化的月份名称
  • %B 本地完整的月份名称
  • %c 本地相应的日期表示和时间表示
  • %j年内的一天(001-366)
  • %p 本地A.M.或P.M.的等价符
  • %U 一年中的星期数(00-53)星期天为星期的开始
  • %w星期(0-6),星期天为星期的开始
  • %W 一年中的星期数(00-53)星期一为星期的开始
  • %x 本地相应的日期表示
  • %X本地相应的时间表示
  • %Z 当前时区的名称
  • %% %号本身
<think>我们已有多个关于获取文件大小的引用,用户明确询问Python获取文件大小的方法。根据引用,我们可以总结几种常见方法: 1. 使用`os.stat()`函数(引用[1]和[2]) 2. 使用`os.path.getsize()`函数(引用[3]) 3. 使用`Path.stat()`(引用[2]中提到的Path对象,属于pathlib模块) 另外,引用[4]展示了文件读写和指针操作,但主要是读取指定字节,与获取文件大小关系不大,但我们可以知道文件大小也可以通过读取整个文件来获取(但不推荐,因为效率低)。 因此,我们将重点介绍前三种方法,并给出示例代码。 注意:用户要求使用中文回答,并且按照之前的系统级指令,数学公式用$...$,独立公式用$$...$$。但本问题不涉及数学公式,所以主要提供代码示例。 同时,按照要求,在回答末尾生成相关问题。 </think>### Python获取文件大小的方法 在Python获取文件大小主要有以下几种方法,根据您的需求可选择最合适的方式: #### 1. **使用`os.stat()`方法**(推荐) 这是最常用的标准方法,通过文件状态信息获取大小: ```python import os file_path = "your_file.txt" # 替换为实际文件路径 file_stats = os.stat(file_path) print(f"文件大小(字节): {file_stats.st_size}") print(f"文件大小(MB): {file_stats.st_size / (1024*1024):.2f}") ``` * 直接访问`st_size`属性获取字节大小 * 可转换为KB/MB等单位 * 无需打开文件,效率高[^1][^2] #### 2. **使用`os.path.getsize()`方法** 更简洁的单行实现: ```python import os file_size = os.path.getsize("your_file.txt") print(f"文件大小: {file_size} 字节") ``` * 直接返回文件字节大小 * 适用于快速获取大小[^3] #### 3. **使用`pathlib`模块**(Python 3.4+) 面向对象的现代方法: ```python from pathlib import Path file = Path("your_file.txt") print(f"文件大小: {file.stat().st_size} 字节") ``` * 符合Pythonic风格 * 支持链式调用[^2] #### 4. **通过文件指针获取**(不推荐) 仅当需要同时处理文件内容时使用: ```python with open("your_file.txt", "rb") as f: f.seek(0, 2) # 移动到文件末尾 size = f.tell() # 获取当前位置(即文件大小) print(f"文件大小: {size} 字节") ``` * 需要实际打开文件 * 效率较低,适合特殊场景[^4] ### 最佳实践建议 1. 常规需求优先使用`os.path.getsize()`,代码最简洁 2. 需要完整文件信息时使用`os.stat()` 3. 新项目建议使用`pathlib`模块 4. 大文件操作避免`seek()`方法,防止内存问题 > 注意:所有方法返回的都是字节单位,1 MB = $1024\times1024$ 字节($2^{20}$ 字节)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值