| | |
| | | """ |
| | | |
| | | def main(gen, dgf, prefix): |
| | | ACTION = ("å®è´¨æ°å¼å·®å¼", "é误å¼(ç¨åº)", "é误å¼(æå·¥)", "ææ¬ä¸å") |
| | | IGNORE = ("已忽ç¥(åè¾¹æå¼)", "已忽ç¥(ç»æ/设计)", "忴尾差(å¯å¿½ç¥)", "ææ¬åæ°å(å¯å¿½ç¥)", |
| | | "å·²ç¥è®¾è®¡(æ¯çæ°å¢è¡)", "å·²ç¥è®¾è®¡(æ 表头è稿å)", "å·²ç¥è®¾è®¡(æåè¡¨å½æ/累计å)", "å
¶å®") |
| | | cats = list(ACTION) + list(IGNORE) |
| | | REASON = {(" è´§è¿", "EA"): "2022å¹´åå¸å·ç´¯è®¡åæ¯ï¼ä¸å¡å·²ç¡®è®¤è½¯ä»¶å£å¾æ£ç¡®ï¼æå·¥é£åéï¼", |
| | | ("ç线å
车", "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 = [] |
| | |
| | | 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 |
| | |
| | | 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: |
| | |
| | | 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") |
| | |
| | | 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## å·²æå£å¾å¿½ç¥ï¼ä»
计æ°ï¼æç»è§ 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))) |