如何根据 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 - mtime
。 age
以秒为单位。
另外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
。
我正在尝试计算命令行传递的目录中有多少文件是非常新的、新的、旧的和非常旧的。我很难计算目录中的文件数量,然后根据文件的年龄更改计数器。
这是我所做的:
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 - mtime
。 age
以秒为单位。
另外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
。