如何根据 Python 中的年龄计算文件?

How to count file in function of their age in Python?

我正在尝试计算命令行传递的目录中有多少文件是非常新的、新的、旧的和非常旧的。我很难计算目录中的文件数量,然后根据文件的年龄更改计数器。

这是我所做的:

import sys
import os, os.path
import time

x = 7
file_count = 0
DIR = sys.argv[1]
age = 0
age_sum = 0
nb_vy = 0
nb_y = 0
nb_o = 0
nb_vo = 0
now = time.time()

for root, subFolders, files in os.walk(DIR):
    for file in (files):
        try:
            file_count += 1
            # here I want to do some if to add 1 in the counter nb_vy/nb_y/nb_o/nb_vo but I don't know how  
            age=now - os.stat(os.path.join(root,file)).st_mtime
            age_sum+=age
            if  now-timedelta(hours=24) <= age <= now :
                nb_vy += 1
            elif now-timedelta(days=7) <= age :
                nb_y += 1
            elif now-timedelta(days=30) <= age :
                nb_o += 1
            else:
                nb_vo += 1
        except Exception:
            pass


print("Filecount = %s" % file_count)


print("--------------------------------------------------------------------\n")
print("Scanned:  "+  str(file_count) +" files\n")
print("Average age:  "+  str(age/age_sum) + "\n")
print("--------------------------------------------------------------------\n")
print("Very young files (<=  1  day) |  "+  str(nb_vy/file_count) +"% (" + str(nb_vy) + ")\n")
print("Young files      (<=  1 week) |  "+  str(nb_y/file_count) +"% (" + str(nb_v) + ")\n")
print("Old files        (<= 30 days) |  "+  str(nb_o/file_count) +"% (" + str(nb_o) + ")\n")
print("Very old files   (>  30  days |  "+  str(nb_vo/file_count) +"% (" + str(nb_vo) + ")\n")
print("--------------------------------------------------------------------\n")

我如何管理 if 级联以递增正确的计数器?

你交换了比较的边,不需要的 now - 仍然存在。一旦这些被修复并且 timedelta 转换为秒的持续时间以进行比较:

        if  age <= timedelta(hours=24).total_seconds():
            nb_vy += 1
        elif age <= timedelta(days=7).total_seconds():
            nb_y += 1
        elif age <= timedelta(days=30).total_seconds():
            nb_o += 1
        else:
            nb_vo += 1

您应该使用 age < max_age_for_group 作为条件。 age 已经是 now - mtimeage 以秒为单位。

另外except Exception: pass会影响调试。如果你必须至少使用它:

except Exception:
    logging.exception('')

这会吃掉异常但仍会打印它。然后您可以通过更改根记录器的级别来关闭打印。

您通过计算时间差正确计算了文件的存在时间:

now = time.time()
mt = os.stat(os.path.join(root,file)).st_mtime
age = now - mt

以上所有变量都存储为float,表示自1970年1月1日以来经过的时间(以秒为单位)。所以差异age是一个以秒为单位的时间差异!

为了分类到指定的时间间隔,您需要将此时间差转换为天数,例如与:

# import datetime
td = datetime.timedelta(0, age)
print(td.days) # Prints the time delta in days (integer)

我想,这正是你比较需要的,好像时差是,例如72000 秒(=20 小时),td.days 将计算为 0