#!/usr/bin/env python3 # -*- coding: utf-8 -*- """probe_akshare_status.py — 探查 akshare 低频任务现状(sanguo-bs-akshare + sanguo-index)。 看: 三表 static 各子目录文件数+最新mtime / 事件类数据有没有 / constituent_unified source 分布。 """ import datetime import sqlite3 from pathlib import Path BASE = Path(r"C:\sanguo_vnpy_v2\data") print("===== data/ 子目录 =====") if BASE.exists(): for p in sorted(BASE.iterdir()): if p.is_dir(): n = sum(1 for _ in p.rglob("*") if _.is_file()) print(f" {p.name}/ ({n} files)") else: print(f" {p.name}") print("\n===== static/ 各表文件数 + 最新 mtime =====") for sub in ["balance", "income", "cashflow", "valuation", "financial_abstract"]: d = BASE / "static" / sub if not d.exists(): print(f" static/{sub}: MISSING") continue files = list(d.glob("*.parquet")) if not files: print(f" static/{sub}: 0 parquet") continue mt = max(f.stat().st_mtime for f in files) print(f" static/{sub}: {len(files)} parquet, latest mtime={datetime.datetime.fromtimestamp(mt):%Y-%m-%d %H:%M}") print("\n===== 事件类数据(龙虎榜/北向/两融/解禁/大宗/可转债/研报) =====") for sub in ["longhubang", "north_flow", "margin", "blockade", "block_trade", "convertible_bond", "research"]: d = BASE / "events" / sub if d.exists(): files = list(d.glob("*")) print(f" events/{sub}: {len(files)} files") else: print(f" events/{sub}: MISSING") # data 根下找可能的 events/其它事件目录 for cand in ["events", "akshare_events", "longhubang", "north"]: d = BASE / cand if d.exists(): print(f" {cand}/ exists") print("\n===== constituent_unified source 分布(看 akshare 部分啥时点) =====") c = sqlite3.connect(str(BASE / "quant_trading.db")) try: print(" source 分布:", c.execute("SELECT source, COUNT(*) FROM constituent_unified GROUP BY source").fetchall()) print(" per-index×source:") for row in c.execute("SELECT index_code, source, COUNT(*) FROM constituent_unified GROUP BY index_code, source ORDER BY index_code"): print(" ", row) finally: c.close() print("\nPROBE DONE")