验证日期一致性



我有一种python脚本,负责删除比给定日期更早的文件夹。这是我的代码:

from pathlib import Path
from shutil import rmtree
import datetime
from datetime import datetime, timezone, timedelta

EXPIRATION_WEEKS=4

def delete_folder(folder: Path):
"""
Delete the content folder.
"""
rmtree(folder)

def check_expiration_date(folder: Path):
expiration_date = datetime.now(timezone.utc) - timedelta(weeks=EXPIRATION_WEEKS)
folder_date = folder.name.split('-')[0]
folder_date = datetime.strptime(folder_date, '%Y%m%d')
return True if folder_date.date() < expiration_date.date() else False

def check_content_folder(folder: Path):
"""
Check if the content folder has a concrete character
"""
return True if '-' in folder.name else False

def delete_folders_with_expired_date(data_path: Path):
"""
Delete the content folder.
"""
for folder in data_path.glob('*'):
if folder.is_dir():
if check_content_folder(folder):
if check_expiration_date(folder):
delete_folder(folder)
print(f"Deleted folder: {folder}")
else:
delete_folders_with_expired_date(folder)

文件夹的名称结构如下:

20220317-120259_.page_w_200-1.png

可以看到,文件夹名称的第一部分是日期(直到'-'字符)。

我想检查开头的日期是否一致,即它不是这样的日期:

  1. 10000101
  2. 28070405

因为负责格式化字符串的库接受这种类型的日期。

这正是我正在搜索的解决方案,感谢@BoarGules:

def validate_date(date_str: str):
"""
Validate if is a consistent date format.
"""
return date_str.isnumeric() and date_str.startswith('20') and len(date_str) == 8

def check_expiration_date(folder: Path):
expiration_date = datetime.now(timezone.utc) - timedelta(weeks=EXPIRATION_WEEKS)
folder_date = folder.name.split('-')[0]
if validate_date(folder_date):
try:
folder_date = datetime.strptime(folder_date, '%Y%m%d')
except Exception:
return False  # Folder name is not a valid date
return folder_date.date() < expiration_date.date()

最新更新