You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中获取无路径文件(typing.IO/SpooledTemporaryFile)的最后修改日期

获取未知路径文件对象的最后修改日期

针对你持有的typing.IO或tempfile.SpooledTemporaryFile类型文件对象,需分情况处理来获取最后修改日期,以下是具体实现方案:

核心逻辑说明

只有关联实际磁盘文件的对象才能获取修改时间,纯内存中的IO对象(如BytesIO)无对应磁盘文件,无法获取该信息。

1. 处理SpooledTemporaryFile对象

SpooledTemporaryFile默认在内存中存储数据,需先强制将内容写入磁盘,再获取底层文件的路径:

  • 调用rollover()方法,确保文件内容写入磁盘
  • 通过内部属性_file获取底层磁盘文件对象,进而拿到文件路径

2. 处理通用IO对象

普通IO对象(如open()返回的文件对象)通常带有name属性,直接通过该属性获取文件路径即可;若没有name属性,说明是纯内存对象,无法获取修改时间。

完整代码实现

import os
from tempfile import SpooledTemporaryFile
from typing import IO, Union
from datetime import datetime

def partition_csv(file: Union[IO, SpooledTemporaryFile]):
    # 处理SpooledTemporaryFile类型
    if isinstance(file, SpooledTemporaryFile):
        file.rollover()  # 强制将内容写入磁盘
        disk_file = file._file
        file_path = disk_file.name
    else:
        # 尝试获取普通IO对象的文件路径
        try:
            file_path = file.name
        except AttributeError:
            raise ValueError("该文件对象未关联实际磁盘文件,无法获取最后修改日期")
    
    # 获取最后修改时间戳并转换为可读格式
    mtime_timestamp = os.stat(file_path).st_mtime
    last_modified = datetime.fromtimestamp(mtime_timestamp)
    
    return last_modified

注意事项

  • SpooledTemporaryFile的_file是内部属性,虽在多数Python版本中稳定可用,但需注意不同版本的实现差异
  • 纯内存IO对象(如BytesIO、StringIO)无对应磁盘文件,会触发ValueError,需根据业务逻辑处理该异常
  • 返回的last_modified是datetime对象,可根据需求格式化为字符串(如last_modified.strftime("%Y-%m-%d %H:%M:%S"))

内容的提问来源于stack exchange,提问作者M Kravets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 06:20:07