50 lines
1.7 KiB
Python
50 lines
1.7 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""分析汪礼平2026年(1-7月)转账/红包往来"""
|
|
import json, pymysql, re
|
|
from collections import defaultdict
|
|
cfg = json.load(open('db_config.json'))
|
|
conn = pymysql.connect(host=cfg['host'], port=cfg['port'], user=cfg['user'],
|
|
password=str(cfg['password']), database=cfg['database'], charset='utf8mb4')
|
|
cur = conn.cursor()
|
|
|
|
cur.execute("""
|
|
SELECT recorded_date, amount, note FROM variable_expenses
|
|
WHERE member_id=1 AND recorded_date BETWEEN '2026-01-01' AND '2026-07-31'
|
|
AND (category='转账/红包' OR category LIKE '%红包%' OR note LIKE '%微信转账%' OR note LIKE '%微信红包%')
|
|
ORDER BY recorded_date
|
|
""")
|
|
rows = cur.fetchall()
|
|
|
|
def peer_of(note):
|
|
parts = [p.strip() for p in note.replace('[微信] ', '').split('|')]
|
|
if len(parts) >= 2:
|
|
return parts[1]
|
|
return '(未知)'
|
|
|
|
by_peer_month = defaultdict(set)
|
|
by_peer_total = defaultdict(float)
|
|
by_peer_count = defaultdict(int)
|
|
by_peer_amounts = defaultdict(list)
|
|
|
|
for d, amt, note in rows:
|
|
p = peer_of(note)
|
|
m = d.strftime('%Y-%m')
|
|
a = float(amt)
|
|
by_peer_month[p].add(m)
|
|
by_peer_total[p] += a
|
|
by_peer_count[p] += 1
|
|
by_peer_amounts[p].append((d.strftime('%m-%d'), a))
|
|
|
|
conn.close()
|
|
|
|
print(f'2026年1-7月 转账/红包共 {len(rows)} 笔\n')
|
|
cands = [(by_peer_count[p], by_peer_total[p], p, sorted(by_peer_month[p]), by_peer_amounts[p])
|
|
for p in by_peer_month]
|
|
cands.sort(key=lambda x: (-x[1]))
|
|
print('=== 按累计金额排序 ===')
|
|
for cnt, tot, p, months, amts in cands:
|
|
print(f'\n◆ {p} | {cnt}笔 | 累计 ¥{tot:,.0f} | {len(months)}个月 {months}')
|
|
details = '、'.join(f'{d}¥{a:.0f}' for d, a in amts)
|
|
print(f' 明细: {details}')
|