亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 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 關注
  • 84 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號