71 lines
1.8 KiB
Python
71 lines
1.8 KiB
Python
import os
|
||
import json
|
||
import polars as pl
|
||
from datetime import date, timedelta, datetime
|
||
from typing import Annotated
|
||
|
||
SavePathType = Annotated[str, "儲存資料的檔案路徑。如果為 None,則不儲存資料。"]
|
||
|
||
def save_output(data: pl.DataFrame, tag: str, save_path: SavePathType = None) -> None:
|
||
"""
|
||
將 DataFrame 儲存到 CSV 檔案。
|
||
|
||
Args:
|
||
data (pl.DataFrame): 要儲存的 DataFrame。
|
||
tag (str): 用於在控制台中打印的標籤。
|
||
save_path (SavePathType, optional): 儲存檔案的路徑。預設為 None。
|
||
"""
|
||
if save_path:
|
||
data.write_csv(save_path)
|
||
print(f"{tag} 已儲存至 {save_path}")
|
||
|
||
|
||
def get_current_date():
|
||
"""
|
||
以 YYYY-MM-DD 格式獲取當前日期。
|
||
|
||
Returns:
|
||
str: 當前日期字串。
|
||
"""
|
||
return date.today().strftime("%Y-%m-%d")
|
||
|
||
|
||
def decorate_all_methods(decorator):
|
||
"""
|
||
一個裝飾器,用於將另一個裝飾器應用於一個類別的所有方法。
|
||
|
||
Args:
|
||
decorator: 要應用的裝飾器。
|
||
|
||
Returns:
|
||
function: 類別裝飾器。
|
||
"""
|
||
def class_decorator(cls):
|
||
for attr_name, attr_value in cls.__dict__.items():
|
||
if callable(attr_value):
|
||
setattr(cls, attr_name, decorator(attr_value))
|
||
return cls
|
||
|
||
return class_decorator
|
||
|
||
|
||
def get_next_weekday(date):
|
||
"""
|
||
獲取給定日期之後的下一個工作日。
|
||
|
||
Args:
|
||
date (str or datetime): 日期。
|
||
|
||
Returns:
|
||
datetime: 下一個工作日。
|
||
"""
|
||
|
||
if not isinstance(date, datetime):
|
||
date = datetime.strptime(date, "%Y-%m-%d")
|
||
|
||
if date.weekday() >= 5:
|
||
days_to_add = 7 - date.weekday()
|
||
next_weekday = date + timedelta(days=days_to_add)
|
||
return next_weekday
|
||
else:
|
||
return date |