利用Python更改文件的创建时间、修改时间、访问时间

今天为大家介绍电脑中在不通过修改文件内容或修改系统时间的方法,把一个文件的修改时间改成任意的时间的方法,用Python这个编程工具就可以实现了。

首先介绍一下从系统中读取一个文件的创建时间、修改时间和访问时间的方法。通过os库实现:
import os
import time
接下来我们找到文件夹和其中的文件并通过os.path.getctime(), os.path.getmtime(), os.path.getatime()这三个方法取得文件的创建时间、修改时间和访问时间。
ODir='Camera'
TDir='MP1'
#列出文件夹中所有文件的创建、修改和访问时间
file=os.listdir(ODir)
for fi in file:
    f=os.path.join(ODir,fi)
    print(fi,'|',time.ctime(os.path.getctime(f)),'|',time.ctime(os.path.getmtime(f)),'|',time.ctime(os.path.getatime(f)))
会看到像下面这样的输出结果:
TimePhoto_20200203_143201.jpg Mon Feb  3 14:32:02 2020 | Mon Feb  3 14:32:02 2020 | Mon Feb  3 00:00:00 2020TimePhoto_20200203_143951.jpg Mon Feb  3 14:39:52 2020 | Mon Feb  3 14:39:52 2020 | Mon Feb  3 00:00:00 2020TimePhoto_20200203_144030.jpg Mon Feb  3 14:40:30 2020 | Mon Feb  3 14:40:30 2020 | Mon Feb  3 00:00:00 2020TimeVideo_20191219_091806.mp4 Thu Dec 19 10:22:42 2019 | Thu Dec 19 10:22:42 2019 | Thu Dec 19 00:00:00 2019TimeVideo_20191219_142138.mp4 Thu Dec 19 14:46:34 2019 | Thu Dec 19 14:46:34 2019 | Thu Dec 19 00:00:00 2019TimeVideo_20191220_102322.mp4 Fri Dec 20 10:54:32 2019 | Fri Dec 20 10:54:32 2019 | Fri Dec 20 00:00:00 2019
接下来进入正题,讲如何修改这些时间。利用os库可以直接实现修改访问时间和修改时间,需要用到的方法是os.utime(),链接:https://www.runoob.com/python/os-utime.html
用法如下:
os.utime(filePath,(os.path.getatime(f), os.path.getmtime(f)))#修改文件的访问时间和修改时间
其中filePath是所要修改的文件路径,os.utime()的第二个参数是一个有两个元素的元组,其第一个元素代表所要修改成的访问时间,第二个元素代表所要修改成的修改时间,注意顺序不要弄反了。在这里,时间都得是一个浮点数(float),与os.path.getatime()等方法取得的时间格式相同,要自定义其他的时间就要参考一下将其他时间格式转换成float类型的方法,这里不再展开讲。
修改文件的创建时间要稍微复杂一些,不过也不难,需要用到win32file这个库,如果还没有装的话,通过pip install pywin32就可以安装了,安装完成后我们像下面一样导入需要用到的内容。
from win32file import CreateFile, SetFileTime, GetFileTime, CloseHandle
from win32file  import GENERIC_READ, GENERIC_WRITE, OPEN_EXISTING
from pywintypes import Time
然后我们使用下面的代码,这里用的例子是将一个文件夹中的文件的创建时间改成另一个文件夹中同名文件的创建时间。
for fi in file:
    filePath=os.path.join(TDir,fi)
    f=os.path.join(ODir,fi)
    createTime=os.path.getctime(f)
    try:
        fh=CreateFile(filePath, GENERIC_READ | GENERIC_WRITE, 0, None, OPEN_EXISTING, 0, 0)
        createTimes, accessTimes, modifyTimes = GetFileTime(fh)
        createTimes = Time(createTime)
        SetFileTime(fh, createTimes, accessTimes, modifyTimes)#修改文件的创建时间
        CloseHandle(fh)
    except Exception as e:
        print(e)
注:
GetFileTime()、SetFileTime()所涉及到的时间格式又不一样,是pywintypes的Time格式,使用pywintypes中的Time()方法就可以把一个浮点数(float)格式表示的时间转换成一个所需的pywintypes时间格式表示的时间,从而就可以用SetFileTime()方法设置文件的创建时间。
(0)

相关推荐