#!/usr/bin/env python3 # -*- coding: utf-8 -*- """验证主库 data(非 staging) 的 ETF + A股 max_date。 检查: sh510300/sh513050/sz159919 max_date==2026-07-21;sh600519 max_date==2026-07-21(未被 staging 覆盖)。 """ import os import sys import pandas as pd DATA = r"C:\sanguo_vnpy_v2\data" def check(sym_prefix, kind="qfq"): """逐年合并所有年份的 parquet。""" root = os.path.join(DATA, kind) if not os.path.isdir(root): return {"err": f"no {kind} dir"} all_dfs = [] for yr in sorted(os.listdir(root)): if not yr.isdigit(): continue p = os.path.join(root, yr, f"{sym_prefix}_daily.parquet") if os.path.exists(p): all_dfs.append(pd.read_parquet(p)) if not all_dfs: return {"err": "not found"} df = pd.concat(all_dfs).sort_values("date") return { "rows": len(df), "min_date": str(df["date"].min().date()), "max_date": str(df["date"].max().date()), "tail_close": float(df["close"].iloc[-1]), "nan_close": bool(df["close"].isnull().any()), } def main(): print("=== ETF 抽样 (qfq) ===") for sym in ("sh510300", "sh513050", "sz159919"): print(f" {sym}: {check(sym, 'qfq')}") print("\n=== A 股对照 (qfq, 验证未被 staging 覆盖) ===") print(f" sh600519: {check('sh600519', 'qfq')}") print(f"\n=== raw 同抽样(完整性对照) ===") print(f" sh510300 raw: {check('sh510300', 'raw')}") print(f" sh600519 raw: {check('sh600519', 'raw')}") sys.stdout.flush() if __name__ == "__main__": main()