使用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和文件列表filesos.path.join(root, file):用当前目录路径+文件名拼接出完整的文件路径,避免路径拼接错误- 补上了
import time,解决time.ctime()未定义的问题 - 最后加了打印结果的代码,方便你验证输出
内容的提问来源于stack exchange,提问作者stacker
相关产品推荐
相关产品推荐

