• 【Python】获取或修改 Windows 系统中文件的创建时间、修改时间和访问时间(os | win32file)


    引言

    Windows 系统中的文件和时间有关的属性共有三个,分别是:创建时间修改时间访问时间。本文介绍如何利用 Python 编程获取或修改这三个属性。

    提示

    • 创建时间:指文件第一次创建的时间;
    • 修改时间:指文件上一次修改的时间;
    • 访问时间:指文件上一次访问的时间。

    方法

    获取时间属性

    • 获取文件创建时间:os.path.getctime(path)(联想记忆:create);
    • 获取文件修改时间:os.path.getmtime(path)(联想记忆:modify);
    • 获取文件访问时间:os.path.getatime(path)(联想记忆:access)。

    修改时间属性

    os.utime 只能更改文件的修改时间和访问时间,而不能更改文件的创建时间。因此,我们这里统一使用 win32file 模块来修改文件的上述三个时间属性。

    实验

    首先,创建一个测试文件。

    with open("test", "wb") as fp:
    	pass
    
    • 1
    • 2

    然后,鼠标右击查看其时间属性。

    在这里插入图片描述

    通过如下代码获取其时间属性。

    import os
    from datetime import datetime
    
    ctime = os.path.getctime("test")
    ctime_string = datetime.fromtimestamp(int(ctime))
    
    mtime = os.path.getmtime("test")
    mtime_string = datetime.fromtimestamp(int(ctime))
    
    atime = os.path.getatime("test")
    atime_string = datetime.fromtimestamp(int(ctime))
    
    print(
        f"创建时间:{ctime_string}", 
        f"修改时间:{mtime_string}", 
        f"访问时间:{atime_string}", 
        sep="\n"
    )
    
    '''输出
    创建时间:2022-09-18 23:24:06
    修改时间:2022-09-18 23:24:06
    访问时间:2022-09-18 23:24:06
    '''
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    通过如下代码修改其时间属性。

    import win32file
    from datetime import datetime
    
    new_ctime = datetime.strptime("2021-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
    new_mtime = datetime.strptime("2022-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
    new_atime = datetime.strptime("2023-01-01 00:00:00", "%Y-%m-%d %H:%M:%S")
    
    handle = win32file.CreateFile(
        "test",
        win32file.GENERIC_READ | win32file.GENERIC_WRITE,
        0,
        None,
        win32file.OPEN_EXISTING,
        0,
        0,
    )
    win32file.SetFileTime(handle, new_ctime, new_atime, new_mtime)  # 注意这里的顺序,访问时间在前,修改时间在后
    win32file.CloseHandle(handle)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    重新查看时间属性,发现已修改。

    在这里插入图片描述

    参考

  • 相关阅读:
    解救Kubernetes混乱:Descheduler快速实现资源平衡
    「PAT乙级真题解析」Basic Level 1108 String复读机 (问题分析+完整步骤+伪代码描述+提交通过代码)
    具名挂载和匿名挂载
    MySQL 基础知识(八)之用户权限管理
    江协科技STM32学习- 2安装Keil5-MDK
    Git常用命令
    目前有哪些比较好用的CRM客户关系管理系统?
    常用Linux系统及区别
    html5 图像标签
    北航第六次数据结构与程序设计作业(查找与排序)选填题
  • 原文地址:https://blog.csdn.net/qq_42951560/article/details/126895314