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

使用os.walk()获取文件创建日期报错:参数需为字符串等类型

解决os.walk()结合os.path.join()时的"argument must be string..."错误

你的问题核心是没搞懂os.walk()的返回结构,直接把它返回的三元组当成了单个路径字符串来用,才触发了类型错误。

错误原因拆解

os.walk()每次迭代返回的是一个三元组:(当前目录路径, 该目录下的子目录列表, 该目录下的文件列表)。你代码里的循环变量i拿到的就是这个三元组,而os.path.join()只接受字符串、字节或者路径类对象,把三元组传进去自然会报错。

而你之前用os.listdir()没问题,是因为它返回的就是当前目录下的文件名/目录名字符串列表,和os.walk的返回结构完全不同。

另外你代码里还有个小问题:用到了time.ctime()但没导入time模块,运行时也会报错,得补上。

修正后的代码

import os
import time  # 补上缺失的导入

def get_information(directory):
    file_list = []
    # 解构os.walk的返回值:root是当前目录路径,files是该目录下的所有文件
    for root, _, files in os.walk(directory):
        # 遍历当前目录下的每个文件
        for file in files:
            # 拼接文件的完整路径
            file_path = os.path.join(root, file)
            # 获取文件状态信息
            stat_info = os.stat(file_path)
            # 存入列表:[完整路径, 最近访问时间, 创建时间]
            file_list.append([file_path, time.ctime(stat_info.st_atime), time.ctime(stat_info.st_ctime)])
    return file_list

# 调用测试
result = get_information(".")
for item in result:
    print(item)

代码说明

  • for root, _, files in os.walk(directory):用_忽略不需要的子目录列表dirs,只保留当前目录路径root和文件列表files
  • os.path.join(root, file):用当前目录路径+文件名拼接出完整的文件路径,避免路径拼接错误
  • 补上了import time,解决time.ctime()未定义的问题
  • 最后加了打印结果的代码,方便你验证输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:50:22