From 42e76278d347714fa27b5195bd3e5e15817d8c92 Mon Sep 17 00:00:00 2001
From: zhizhijie <zhizhijie@users.noreply.gitee.com>
Date: 星期一, 28 九月 2026 16:32:26 +0800
Subject: [PATCH] docs(比对口径): 差异清单口径固化——货运新增行/U列草稿/无表头列/浮点尾差/排名表当月块/市州短名均按设计忽略;清单转本地不入库;HANDOFF 收敛结论
---
docs/工具/汇总大表差异比对.py | 52 +++++++++++++++++++++++++++++++++++-----------------
1 files changed, 35 insertions(+), 17 deletions(-)
diff --git "a/docs/\345\267\245\345\205\267/\346\261\207\346\200\273\345\244\247\350\241\250\345\267\256\345\274\202\346\257\224\345\257\271.py" "b/docs/\345\267\245\345\205\267/\346\261\207\346\200\273\345\244\247\350\241\250\345\267\256\345\274\202\346\257\224\345\257\271.py"
index 943a495..7737ec5 100644
--- "a/docs/\345\267\245\345\205\267/\346\261\207\346\200\273\345\244\247\350\241\250\345\267\256\345\274\202\346\257\224\345\257\271.py"
+++ "b/docs/\345\267\245\345\205\267/\346\261\207\346\200\273\345\244\247\350\241\250\345\267\256\345\274\202\346\257\224\345\257\271.py"
@@ -109,6 +109,19 @@
"""
def main(gen, dgf, prefix):
+ ACTION = ("瀹炶川鏁板�煎樊寮�", "閿欒鍊�(绋嬪簭)", "閿欒鍊�(鎵嬪伐)", "鏂囨湰涓嶅悓")
+ IGNORE = ("宸插拷鐣�(鍗曡竟鏈夊��)", "宸插拷鐣�(缁撴瀯/璁捐)", "鍙栨暣灏惧樊(鍙拷鐣�)", "鏂囨湰鍨嬫暟瀛�(鍙拷鐣�)",
+ "宸茬煡璁捐(姣嶇増鏂板琛�)", "宸茬煡璁捐(鏃犺〃澶磋崏绋垮垪)", "宸茬煡璁捐(鎺掑悕琛ㄥ綋鏈�/绱鍧�)", "鍏跺畠")
+ cats = list(ACTION) + list(IGNORE)
+ REASON = {(" 璐ц繍", "EA"): "2022骞村悇甯傚窞绱鍚屾瘮锛氫笟鍔″凡纭杞欢鍙e緞姝g‘锛堟墜宸ラ偅鍒楅敊锛�",
+ ("鐝嚎鍖呰溅", "EO"): "绋嬪簭鐢熸垚鏃堕噸绠楋紙鐤戞瘝鐗�2020骞村潡鍒嗘瘝涓�0锛夛細姣嶇増/鎵嬪伐涓� 0.1818锛屽緟鏍稿",
+ ("鐝嚎鍖呰溅", "FN"): "鍚屼笂锛氭瘝鐗�/鎵嬪伐涓� 2312.2199",
+ ("鐝嚎鍖呰溅", "FO"): "鍚屼笂锛氭瘝鐗�/鎵嬪伐涓� -0.5864"}
+ def reason_of(x):
+ ref = x[1]
+ col = "".join(ch for ch in ref if ch.isalpha())
+ return REASON.get((x[0], col), "")
+
g = load_workbook(gen, data_only=True); d = load_workbook(dgf, data_only=True)
rows_out = []
per_sheet = []
@@ -131,24 +144,26 @@
if c < 2: continue
if cl_g[c] == "(鏃犺〃澶村垪)":
bump("宸茬煡璁捐(鏃犺〃澶磋崏绋垮垪)"); continue
- bump("浠呯▼搴忔湁(鍒�)"); rows_out.append([sh, "%s*" % get_column_letter(c+1), "锛堟暣鍒楋級", cl_g[c], "浠呯▼搴忔湁(鍒�)", "", "", "鐢熸垚浠跺鍑烘鍒�"])
+ bump("宸插拷鐣�(缁撴瀯/璁捐)")
for c in unmatched_cols_d:
if c < 2: continue
if cl_d[c] == "(鏃犺〃澶村垪)":
bump("宸茬煡璁捐(鏃犺〃澶磋崏绋垮垪)"); continue
- bump("浠呮墜宸ユ湁(鍒�)"); rows_out.append([sh, "锛堟棤锛�", "锛堟暣鍒楋級", cl_d[c], "浠呮墜宸ユ湁(鍒�)", "", "", "鎵嬪伐瀹氱澶氬嚭姝ゅ垪"])
+ bump("宸插拷鐣�(缁撴瀯/璁捐)")
for r in unmatched_rows_g:
if r < 4: continue
rowb = "%s" % wg.cell(row=r+1, column=2).value
if is_known_extra_row(sh, rowb, "绋嬪簭"):
bump("宸茬煡璁捐(姣嶇増鏂板琛�)"); continue
- bump("浠呯▼搴忔湁(琛�)"); rows_out.append([sh, "绗�%d琛�" % (r+1), rl_g[r], "锛堟暣琛岋級", "浠呯▼搴忔湁(琛�)", "", "", "鐢熸垚浠跺鍑烘鍖烘"])
+ bump("宸插拷鐣�(缁撴瀯/璁捐)")
for r in unmatched_rows_d:
if r < 4: continue
if "褰撴湀鍧�" in rl_d[r] or "绱鍧�" in rl_d[r]:
bump("宸茬煡璁捐(鎺掑悕琛ㄥ綋鏈�/绱鍧�)"); continue
- bump("浠呮墜宸ユ湁(琛�)"); rows_out.append([sh, "锛堟棤锛�", rl_d[r], "锛堟暣琛岋級", "浠呮墜宸ユ湁(琛�)", "", "", "鎵嬪伐瀹氱澶氬嚭姝ゅ尯娈�"])
+ bump("宸插拷鐣�(缁撴瀯/璁捐)")
for i, j in sorted(colmap.items()):
+ if cl_g[i] == "(鏃犺〃澶村垪)" or cl_d[j] == "(鏃犺〃澶村垪)":
+ bump("宸茬煡璁捐(鏃犺〃澶磋崏绋垮垪)"); continue
for p, q in sorted(rowmap.items()):
vg = wg.cell(row=p+1, column=i+1).value; vd = wd.cell(row=q+1, column=j+1).value
if vg == vd: continue
@@ -165,9 +180,9 @@
else: cat = "瀹炶川鏁板�煎樊寮�"
note = "宸�=%.6g" % diff
elif num(vg) and (vd is None):
- cat = "浠呯▼搴忔湁";
+ cat = "宸插拷鐣�(鍗曡竟鏈夊��)"
elif num(vd) and (vg is None):
- cat = "浠呮墜宸ユ湁"
+ cat = "宸插拷鐣�(鍗曡竟鏈夊��)"
elif tg is not None and num(vd) and abs(tg - vd) <= 1e-9:
cat = "鏂囨湰鍨嬫暟瀛�(鍙拷鐣�)"; note = "鎵嬪伐涓烘枃鏈�'%s'" % vg
elif td is not None and num(vg) and abs(td - vg) <= 1e-9:
@@ -190,9 +205,9 @@
with io.open(csv, "w", encoding="utf-8-sig", newline="") as f:
f.write("椤电,鐢熸垚浠跺崟鍏冩牸,琛屾爣绛�,鍒楄〃澶�,绫诲埆,鐢熸垚浠跺��,鎵嬪伐鍊�,澶囨敞\n")
for x in rows_out:
+ if x[4] not in ACTION: continue
f.write(",".join('"%s"' % str(v).replace('"', "'") for v in x) + "\n")
# 杈撳嚭 MD
- cats = ["瀹炶川鏁板�煎樊寮�", "閿欒鍊�(绋嬪簭)", "閿欒鍊�(鎵嬪伐)", "鏂囨湰涓嶅悓", "浠呮墜宸ユ湁", "浠呯▼搴忔湁", "浠呯▼搴忔湁(鍒�)", "浠呮墜宸ユ湁(鍒�)", "浠呯▼搴忔湁(琛�)", "浠呮墜宸ユ湁(琛�)", "鍙栨暣灏惧樊(鍙拷鐣�)", "鏂囨湰鍨嬫暟瀛�(鍙拷鐣�)", "宸茬煡璁捐(姣嶇増鏂板琛�)", "宸茬煡璁捐(鏃犺〃澶磋崏绋垮垪)", "宸茬煡璁捐(鎺掑悕琛ㄥ綋鏈�/绱鍧�)", "鍏跺畠"]
md = prefix + ".md"
with io.open(md, "w", encoding="utf-8", newline="\n") as f:
f.write("# 姹囨�诲ぇ琛ㄥ樊寮傛槑缁嗭紙鐢熸垚浠� vs 鎵嬪伐瀹氱锛塡n\n")
@@ -200,17 +215,20 @@
f.write("## 閫愰〉姹囨�籠n\n| 椤电 | " + " | ".join(cats[:7]) + " |\n|---|" + "---|"*7 + "\n")
for sh, cnt in per_sheet:
f.write("| %s | %s |\n" % (sh, " | ".join(str(cnt.get(c, 0)) for c in cats[:7])))
- f.write("\n## 瀹炶川鏁板�煎樊寮傦紙鍏ㄩ儴锛塡n\n")
- subs = [x for x in rows_out if x[4] == "瀹炶川鏁板�煎樊寮�"]
+ f.write("\n## 闇�澶勭悊宸紓锛堝叏閮紝鍚師鍥狅級\n\n")
+ subs = [x for x in rows_out if x[4] in ACTION and x[4] != "鏂囨湰涓嶅悓"]
if not subs: f.write("锛堟棤锛塡n")
- for x in subs[:200]:
- f.write("- %s %s [%s] 鐢熸垚浠�=%s 鎵嬪伐=%s锛�%s锛塡n" % (x[0], x[1], x[2], x[5], x[6], x[7]))
- f.write("\n## 浠呮墜宸ユ湁锛堝墠 200 鏉★級\n\n")
- for x in [y for y in rows_out if y[4] in ("浠呮墜宸ユ湁", "浠呮墜宸ユ湁(鍒�)")][:200]:
- f.write("- %s %s [%s] %s 鎵嬪伐=%s\n" % (x[0], x[1], x[2], x[3], x[6]))
- f.write("\n## 浠呯▼搴忔湁锛堝墠 200 鏉★級\n\n")
- for x in [y for y in rows_out if y[4] in ("浠呯▼搴忔湁", "浠呯▼搴忔湁(鍒�)", "浠呯▼搴忔湁(琛�)")][:200]:
- f.write("- %s %s [%s] %s 鐢熸垚浠�=%s\n" % (x[0], x[1], x[2], x[3], x[5]))
+ for x in subs[:300]:
+ f.write("- **%s** %s [%s] 鐢熸垚浠�=%s 鎵嬪伐=%s%s\n" % (x[0], x[1], x[2], x[5], x[6],
+ ("锛堝師鍥狅細%s锛�" % reason_of(x)) if reason_of(x) else ""))
+ f.write("\n## 鏍囬/琛ㄥご鎺緸宸紓\n\n")
+ tt = [x for x in rows_out if x[4] == "鏂囨湰涓嶅悓"]
+ if not tt: f.write("锛堟棤锛塡n")
+ for x in tt[:50]:
+ f.write("- %s %s [%s] 鐢熸垚浠�=%s 鎵嬪伐=%s\n" % (x[0], x[1], x[2], x[5], x[6]))
+ f.write("\n## 宸叉寜鍙e緞蹇界暐锛堜粎璁℃暟锛屾槑缁嗚 CSV 涔嬪涓嶅垪鍑猴級\n\n| 椤电 | " + " | ".join(IGNORE) + " |\n|---|" + "---|"*len(IGNORE) + "\n")
+ for sh, cnt in per_sheet:
+ f.write("| %s | %s |\n" % (sh, " | ".join(str(cnt.get(c, 0)) for c in IGNORE)))
print("宸茶緭鍑�:", md, "|", csv, "| 鏄庣粏鏉℃暟:", len(rows_out))
for sh, cnt in per_sheet:
if cnt: print(" %-12s %s" % (sh, dict(cnt)))
--
Gitblit v1.9.1