如何在Raspberry Pi Pico W的MicroPython中获取正确文件修改日期?
解决Raspberry Pi Pico W上MicroPython获取文件正确修改时间的问题
可能的原因及解决方案
1. 升级MicroPython固件版本
旧版本的MicroPython针对Pico W的LittleFS文件系统实现存在时间戳更新bug,建议直接升级到最新稳定版固件,多数情况下能解决时间戳不更新的问题。
2. 确保修改文件时系统时间已生效
即使time.localtime()显示时间正确,也要确认在完成文件修改操作前系统时间已正确同步/设置。若文件是在系统时间未初始化前创建的,其初始修改时间会是epoch默认值,后续修改文件时需保证时间正常,才会触发时间戳更新。
3. 手动强制设置文件修改时间
如果文件系统自动更新时间戳的功能失效,可在修改文件后手动调用os.utime()函数设置修改时间:
import os import time file_path = "/test.txt" # 获取当前秒级时间戳 current_timestamp = time.time() # 同步设置访问时间和修改时间为当前时间 os.utime(file_path, (current_timestamp, current_timestamp)) # 读取并转换修改时间 stat_data = os.stat(file_path) modified_time = time.localtime(stat_data[8]) print(f"文件最后修改时间: {modified_time[0]}-{modified_time[1]:02d}-{modified_time[2]:02d} {modified_time[3]:02d}:{modified_time[4]:02d}:{modified_time[5]:02d}")
4. 验证文件系统时间戳支持
Pico W默认使用的LittleFS v2原生支持时间戳,但自定义编译的固件可能未启用该功能。若使用官方固件无需额外配置;若自行编译固件,需确保编译选项中开启了LittleFS的时间戳支持。
获取目录中最后修改文件的完整代码
import os import time def get_last_modified_file(dir_path="/"): latest_mtime = 0 target_file = None # 遍历目录条目 for entry in os.ilistdir(dir_path): file_name, entry_type = entry[0], entry[1] # 仅处理常规文件(跳过目录) if entry_type != 0x8000: continue full_path = f"{dir_path}/{file_name}" if dir_path != "/" else f"/{file_name}" stat_info = os.stat(full_path) file_mtime = stat_info[8] if file_mtime > latest_mtime: latest_mtime = file_mtime target_file = full_path if target_file: # 转换为可读时间格式 readable_time = time.localtime(latest_mtime) formatted_time = f"{readable_time[0]}-{readable_time[1]:02d}-{readable_time[2]:02d} {readable_time[3]:02d}:{readable_time[4]:02d}:{readable_time[5]:02d}" return target_file, formatted_time else: return None, "目录下无有效文件" # 调用示例 target, mod_time = get_last_modified_file() if target: print(f"最后修改的文件: {target}") print(f"修改时间: {mod_time}") else: print(mod_time)
内容的提问来源于stack exchange,提问作者Gary Homewood
相关产品推荐
相关产品推荐

