#!/usr/bin/env python3 from ast import arg import json from datetime import date, datetime as dt # from datetime import timezone as tz # from datetime import timedelta as td import argparse parser = argparse.ArgumentParser() parser.add_argument("-j", "--json-file-name", type=str, help="読み込むJSONのファイル名") parser.add_argument("-d", "--date", type=str, help="保存する日付") args = parser.parse_args() def ext_snapshot_dates(data:dict): """オブジェクトからスナップショットの日付のみを取り出してlistに格納します。""" s = [] for d in data["snapshots"]: s += [d["created"]] return s def print_dates(dates:list, formatted_date:bool=True) -> None: """ リストに格納された日付を一覧表示します。 Params ------- dates UNIX timeが格納されたlist。 ext_snapshot_datesの返り値をそのまま使用できます。 formatted_date 日付を整形して表示する。 例) "2022/02/05 07:19:27" """ s = "" for i in range(len(dates)): if formatted_date: s += format_date(dates[i]) else: s += str(d) if i % 5 == 0: s += ",\n" else : s += ", " print(s) def format_date(unixtime:int) -> str: """UNIX timeを読める形で整形する。""" t = dt.fromtimestamp(int(unixtime)) return "%04d/%02d/%02d %02d:%02d:%02d" % (t.year,t.month,t.day,t.hour,t.minute,t.second) def search_date(pattern , dates:list) -> int: """ 日付を検索する Params ---- pattern 検索する日付。 format_dateで整形された日付か、UNIX timeに対応している。 dates UNIX timeが格納されたlist。 Return ---- 一致した要素番号(インデックス)を返す。 見つからなかった場合は-1を返す。 """ for i in range(len(dates)): if pattern == str(dates[i]): return i if pattern == format_date(dates[i]): return i return -1 if(args.json_file_name is None): FILE_NAME = input("ファイル名を入力 >>> ") else: FILE_NAME = args.json_file_name with open(FILE_NAME, mode="rt", encoding="utf-8") as f: data = json.load(f) dates = ext_snapshot_dates(data) if(args.date is None): print( "行数:" + str(len(data["snapshots"])) ) print_dates(dates) print("どの日付のスナップショットを取り出しますか?") d = input("上の中から選んでください >>> ") d_index = search_date(d, dates) while(d_index < 0): d = input("見つからなかったのでもう一度入力 >>> ") d_index = search_date(d, dates) else: d = args.date d_index = search_date(d, dates) if(d_index < 0): print("--dateの値に一致する日付が見つかりませんでした。") exit(1) print(f"{d_index}番目のスナップショットを保存します。") with open(f"{d_index}.json", mode="wt", encoding="utf-8") as f: json.dump(data["snapshots"][d_index], f, ensure_ascii=False, indent=2)