"""Per-paper completion report. Usage: python status_report.py """ import json import os import re import sys plan = json.load(open(sys.argv[1], encoding='utf-8')) base = sys.argv[2] SECS = ['一、', '二、', '三、', '四、', '五、', '六、'] rows = [] incomplete = [] for p in plan: pdf = os.path.join(base, p['pdf_path']) md = os.path.join(base, p['md_path']) pdf_ok = os.path.exists(pdf) and open(pdf, 'rb').read(4) == b'%PDF' and os.path.getsize(pdf) > 20000 md_ok = os.path.exists(md) cjk = 0 miss = [] link_ok = False if md_ok: t = open(md, encoding='utf-8').read() cjk = len(re.findall(r'[\u4e00-\u9fff]', t)) for s in SECS: if '## ' + s not in t: miss.append(s[0]) m = re.search(r'\]\(\./([^)]+\.pdf)\)', t) if m: link_ok = os.path.exists(os.path.join(os.path.dirname(md), m.group(1))) if md_ok and not miss and link_ok and pdf_ok: pass else: incomplete.append((p['id'], p['stem'], pdf_ok, md_ok, miss, link_ok)) rows.append((p['dir'], p['stem'], pdf_ok, md_ok, cjk, ''.join(miss) or '-', link_ok)) print('%-16s %-46s %-6s %-6s %-7s %-8s %s' % ('类别', '文件前缀', 'PDF', 'MD', '汉字', '缺章节', 'PDF链接')) print('-' * 120) for d, stem, po, mo, cjk, miss, lo in rows: print('%-16s %-46s %-6s %-6s %-7d %-8s %s' % ( d, stem, 'OK' if po else 'MISSING', 'OK' if mo else 'MISSING', cjk, miss, 'OK' if lo else 'BROKEN')) print('-' * 120) print('总计 %d 篇;未完成 %d 篇' % (len(rows), len(incomplete))) for i in incomplete: print(' ! 未完成:', i)