DC娱乐网

Python超实用技巧!搞定文件最后修改时间,我踩过的坑都给你避了

昨天帮公司同事解决了个小问题——他要批量修改一批文件的最后修改时间,查了半天资料,代码要么报错要么没效果,折腾了快半天。

昨天帮公司同事解决了个小问题——他要批量修改一批文件的最后修改时间,查了半天资料,代码要么报错要么没效果,折腾了快半天。我拿过来看了下,其实就几行代码的事儿,10分钟就搞定了。

其实设置文件最后修改时间是Python文件操作里超实用的技巧,不管是做测试模拟文件时间、整理本地文件,还是处理工作中的批量文件,都能用到。今天就把我整理的方法和踩过的坑分享给大家,新手也能一看就会。

刚开始学Python做文件操作时,我踩过的坑能列一串。相信很多新手都有这感受:明明照着教程写的代码,就是跑不通,要么参数不对,要么时间格式错,越改越懵。其实核心就两个点:时间要转成时间戳、路径要写对,把这俩搞定,问题就解决了80%。

Python设置文件最后修改时间,核心就两种方法:基础的os模块(兼容性强,所有Python版本都能用)、简洁的pathlib模块(Python3.4+适用,写起来更顺手),我都拆解得明明白白。

方法1:os模块(基础款,稳不出错)

核心函数是os.utime(),它能同时设置文件的“访问时间”和“修改时间”,搭配time模块处理时间格式就行。

核心步骤:

确定文件路径(绝对路径/相对路径都可以,推荐绝对路径,避免路径错误);把想要设置的时间转换成“时间戳”(Python只认这个格式,直接传日期会报错);调用os.utime(),传入路径和(访问时间戳,修改时间戳)。

示例代码(直接复制能用):

import os import time # 1. 要修改的文件路径(替换成你的文件路径) file_path = "test.txt" # 场景1:改成当前时间(最简单) current_timestamp = time.time() # 获取当前时间戳 os.utime(file_path, (current_timestamp, current_timestamp)) # 第一个是访问时间,第二个是修改时间 print(f"已将{file_path}的最后修改时间设为当前时间") # 场景2:改成指定时间(比如2026-01-01 12:00:00) # 先把指定时间转成时间元组,再转成时间戳 target_time = time.strptime("2026-01-01 12:00:00", "%Y-%m-%d %H:%M:%S") target_timestamp = time.mktime(target_time) os.utime(file_path, (target_timestamp, target_timestamp)) print(f"已将{file_path}的最后修改时间设为2026-01-01 12:00:00") 方法2:pathlib模块(简洁款,写起来更舒服)

Python3.4之后出的pathlib,用“面向对象”的方式处理路径,不用记一堆路径拼接的函数,搭配datetime模块更顺手。

核心步骤:

用Path()指定文件路径;把指定时间转成datetime对象,再转成时间戳;调用touch()方法(文件不存在会自动创建,存在就更新时间)。

示例代码(直接复制能用):

from pathlib import Path from datetime import datetime import time import os # 1. 指定文件路径 file_path = Path("test.txt") # 场景1:改成当前时间 file_path.touch() # 直接更新为当前时间,超简单 print(f"已将{file_path}的最后修改时间设为当前时间") # 场景2:改成指定时间(2024-01-01 12:00:00) target_datetime = datetime(2026, 1, 1, 12, 0, 0) # 年、月、日、时、分、秒 target_timestamp = time.mktime(target_datetime.timetuple()) # 设置修改时间 os.utime(file_path, (target_timestamp, target_timestamp)) # pathlib最终还是调用os.utime,更易读 print(f"已将{file_path}的最后修改时间设为2026-01-01 12:00:00")

光看基础示例不够,分享两个我日常用得最多的案例,新手直接复制改路径就能用。

案例1:批量修改文件夹下所有类型文件的修改时间

比如把“docs”文件夹里所有文件的修改时间,都改成2026-01-01 12:00:00:

import os import time from pathlib import Path # 目标文件夹路径(替换成你的路径) folder_path = "docs" # 目标时间(转成时间戳) target_time = time.strptime("2026-01-01 12:00:00", "%Y-%m-%d %H:%M:%S") target_timestamp = time.mktime(target_time) for file in Path(folder_path).glob("*"): # 用"*"匹配当前文件夹所有内容 if file.is_file(): # 只处理文件,跳过文件夹 os.utime(file, (target_timestamp, target_timestamp)) print(f"已修改:{file}") print("批量修改完成!") 案例2:修改文件夹 + 所有子文件夹下的所有文件(递归)

如果你的文件夹里还有子文件夹,想把所有层级的文件都改了,就用 **/*(注意加 recursive=True):

import os import time from pathlib import Path folder_path = "docs" target_time = time.strptime("2026-01-01 12:00:00", "%Y-%m-%d %H:%M:%S") target_timestamp = time.mktime(target_time) for file in Path(folder_path).glob("**/*", recursive=True): if file.is_file(): os.utime(file, (target_timestamp, target_timestamp)) print(f"已修改:{file}") print("递归批量修改完成!")

设置文件最后修改时间的核心是os.utime()函数,关键要把时间转成时间戳(直接传日期字符串会报错); 新手优先用os模块(兼容性强),Python3.4+可以用pathlib模块(代码更易读);批量修改文件时,一定要加is_file()判断,避免误改文件夹。

其实这些个技巧不难,核心就是把“时间格式”和“文件路径”这两个坑避开,剩下的就是套模板。新手多练两次,下次遇到改文件时间的需求,10分钟就能搞定~