filter.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import json
  2. def read(file: "str") -> "dict":
  3. with open(file, "r", encoding="utf-8") as fp:
  4. data = json.load(fp)
  5. fp.close()
  6. return data
  7. def save(file: "str", data):
  8. with open(file, "w", encoding="utf-8") as fp:
  9. json.dump(data, fp, ensure_ascii=False, indent=2)
  10. fp.close()
  11. def trip_name(name: "str") -> "tuple[bool, str]":
  12. if name.endswith("村村民委员会"):
  13. return True, name[:-5]
  14. elif name.endswith("村民委员会"):
  15. return True, name[:-4]
  16. elif name.endswith("居民委员会"):
  17. return True, name[:-5]
  18. elif name.endswith("村村民委会"):
  19. return True, name[:-4]
  20. elif name.endswith("村民委会"):
  21. return True, name[:-3]
  22. elif name.endswith("村村委会"):
  23. return True, name[:-3]
  24. elif name.endswith("村委会"):
  25. return True, name[:-2]
  26. elif name.endswith("居委会"):
  27. return True, name[:-3]
  28. elif name.endswith("居民委"):
  29. return True, name[:-3]
  30. elif name.endswith("家委会"):
  31. return True, name[:-3]
  32. elif name.endswith("委员会"):
  33. return True, name[:-3]
  34. elif name.endswith("村村委"):
  35. return True, name[:-2]
  36. elif name.endswith("村委"):
  37. return True, name[:-1]
  38. elif name.endswith("委会"):
  39. return True, name[:-2]
  40. elif name.endswith("嘎查"):
  41. return True, name
  42. elif name.endswith("大学"):
  43. return True, name
  44. elif name.endswith("学院"):
  45. return True, name
  46. elif name.endswith("公司"):
  47. return True, name
  48. elif name.endswith("中心"):
  49. return True, name
  50. elif name.endswith("区"):
  51. return True, name
  52. elif name.endswith("处"):
  53. return True, name
  54. elif name.endswith("村"):
  55. return True, name
  56. elif name.endswith("队"):
  57. return True, name
  58. return False, name
  59. def mFilter(data: "dict"):
  60. db_data = { # (id, name, level, child, type)
  61. "province": [], "city": [], "county": [], "town": [], "village": []
  62. }
  63. urc, total = [], {"province": 0, "city": 0, "county": 0, "town": 0, "village": 0}
  64. def do_village_of(tt: "dict"):
  65. for vid, village in tt.items():
  66. total["village"] += 1
  67. success, name = trip_name(village["name"])
  68. if not success:
  69. urc.append(name)
  70. db_village = (vid, name, "5-", None, village["type"])
  71. db_data["village"].append(db_village)
  72. for pid, province in data.items(): # 2
  73. print(f"|-province <{province['name']}>")
  74. total["province"] += 1
  75. db_province = (pid, province["name"], "1+", "2+", None)
  76. db_data["province"].append(db_province)
  77. for cid, city in province["children"].items(): # 4
  78. print(f"|---city <{city['name']}>")
  79. total["city"] += 1
  80. countyAsChild = True
  81. for cot_id, cot in city["children"].items(): # 6, 9
  82. if len(cot_id) == 9:
  83. total["town"] += 1
  84. db_town = (cot_id, cot["name"], "4+", "5-", None)
  85. db_data["town"].append(db_town)
  86. countyAsChild = False
  87. do_village_of(cot["children"])
  88. else:
  89. total["county"] += 1
  90. db_county = (cot_id, cot["name"], "3+", "4+", None)
  91. db_data["county"].append(db_county)
  92. for tid, town in cot["children"].items():
  93. total["town"] += 1
  94. db_town = (tid, town["name"], "4+", "5-", None)
  95. db_data["town"].append(db_town)
  96. do_village_of(town["children"])
  97. if countyAsChild:
  98. db_city = (cid, city["name"], "2+", "3+", None)
  99. else:
  100. db_city = (cid, city["name"], "2+", "4+", None)
  101. db_data["city"].append(db_city)
  102. print(urc)
  103. save("db_data.json", db_data)
  104. save("total.json", total)
  105. def main():
  106. file_f, file_t = "all-1.json", "filter.json"
  107. raw = read(file_f)
  108. mFilter(raw)
  109. if __name__ == '__main__':
  110. main()