为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 os.stat 正确遍历目录名称?

如何使用 os.stat 正确遍历目录名称?

扬帆大鱼 2022-07-26 09:30:32
我正在尝试提取 C:/Folder 下的顶级目录列表。然后我想检查每个目录的修改日期。我可以用next(os.walk(source_dir))[1] 获取目录列表。但是当我尝试使用os.stat(str(dir_list))[stat.ST_MTIME]要获取每个目录的修改日期,它似乎将所有目录名称作为一个大名称进行搜索。这给了我一个 File Not Found 错误。如何获取每个子目录的修改日期而不会出现 File Not Found 错误?import os.pathimport time, stat# Source directorysource_dir  = r'C:/Folder'def check_dir():    if not os.path.isdir(source_dir):        # Needed to detect top level files        print("Nothing in top folder.")    else:        dir_list = next(os.walk(source_dir))[1]        print(dir_list)        # get modified time for directories        dtime = os.stat(str(dir_list))[stat.ST_MTIME]        if time.time() - dtime <= 7776000:            print("Found modification in last 90 days for folder =>", dir_list, time.ctime(dtime))if __name__ == "__main__":    check_dir()
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

您不能os.stat用于必须遍历列表的列表:


def check_dir():

    if not os.path.isdir(source_dir):

        # Needed to detect top level files

        print("Nothing in top folder.")

    else:

        root, dir_list, _ = next(os.walk(source_dir))

        print(dir_list)

        # get modified time for directories

        for dir in dir_list:

            dtime = os.stat(str(root + os.path.sep + dir))[stat.ST_MTIME]

            if time.time() - dtime <= 7776000:

                print("Found modification in last 90 days for folder =>", dir, time.ctime(dtime))



if __name__ == "__main__":

    check_dir()


查看完整回答
反对 回复 2022-07-26
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

问题是它os.walk为您提供了一个相对路径,source_dir例如:


import os


source_dir = '/tmp/'

relative_paths = [relative_path for relative_path in next(os.walk(source_dir))[1]]

print(relative_paths)


>>> ['com.google.Keystone', 'com.apple.launchd.liNmfkel1M', 'powerlog']

为了获取统计信息,您需要使用每个文件夹的完整路径,例如:


import os

import stat


source_dir = '/tmp/'

full_paths = [os.path.join(source_dir, relative_path) for relative_path in next(os.walk(source_dir))[1]]

print(full_paths)


>>> ['/tmp/com.google.Keystone', '/tmp/com.apple.launchd.liNmfkel1M', '/tmp/powerlog']

然后你可以使用它们:


import os

import stat


source_dir = '/tmp/'

full_paths = [os.path.join(source_dir, relative_path) for relative_path in next(os.walk(source_dir))[1]]

stats = [os.stat(path)[stat.ST_MTIME] for path in full_paths]

print(stats)


>>> [1581523169, 1581523164, 1581523141]


查看完整回答
反对 回复 2022-07-26
  • 2 回答
  • 0 关注
  • 129 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号