import xml.etree.ElementTree as ET from subdir import service from bson.objectid import ObjectId from pymongo import AsyncMongoClient import asyncio def getDingercj_(root, bh, bt, qdbm, debm): result = [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志" ]] #result.append(["ming cheng", "jin e", "zan gu jia", "anquan wenming fei", "guifei"]) item = None for child in root: if child.tag == "Dxgcxx": for child1 in child: Dwgcbh = child1.attrib["Dwgcbh"] if Dwgcbh == bh: item = child1 break ##result.append([child.attrib["Dxgcmc"], child.attrib["Je"], child.attrib["Zgj"], child.attrib["Aqwmf"], child.attrib["Gf"]]) Fywj = None for child in item: if child.tag == 'Qdxm': Fywj= child break Rcjhz = None for child in item: if child.tag == 'Rcjhz': Rcjhz = child break kv = {} for entry in Rcjhz: kv[entry.attrib["RcjId"]]=entry container = None for child in Fywj: ##child is mx if child.tag == "QdBt": if child.attrib["Mc"] == bt: container = child break if not container: container = Fywj zimu = None for child in container: if child.attrib["Qdbm"] == qdbm: zimu = child break box = None if not zimu: return result for child in zimu: if child.tag == "Qdxdezj": box = child break hlmx_parent = None for child in box: if child.attrib["Debm"] == debm: for grandchild in child: if grandchild.tag == "Qdxdercjhl": hlmx_parent = grandchild for child in hlmx_parent: result.append([child.attrib["RcjId"], kv[child.attrib["RcjId"]].attrib["RcjBm"], kv[child.attrib["RcjId"]].attrib["Mc"], kv[child.attrib["RcjId"]].attrib["Ggxh"], kv[child.attrib["RcjId"]].attrib["Dw"], kv[child.attrib["RcjId"]].attrib["Dj"], kv[child.attrib["RcjId"]].attrib["Cd"], kv[child.attrib["RcjId"]].attrib["Gycs"], kv[child.attrib["RcjId"]].attrib["Rcjlb"], kv[child.attrib["RcjId"]].attrib["Jgbz"], child.attrib["Rcjhl"], child.attrib["Rcjhj"], "", "", "", "" ]) return result def getQingdanrcj_(root, bh, bt, bm): result = [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志" ]] #result.append(["ming cheng", "jin e", "zan gu jia", "anquan wenming fei", "guifei"]) item = None for child in root: if child.tag == "Dxgcxx": for child1 in child: Dwgcbh = child1.attrib["Dwgcbh"] if Dwgcbh == bh: item = child1 break ##result.append([child.attrib["Dxgcmc"], child.attrib["Je"], child.attrib["Zgj"], child.attrib["Aqwmf"], child.attrib["Gf"]]) Fywj = None for child in item: if child.tag == 'Qdxm': Fywj= child break Rcjhz = None for child in item: if child.tag == 'Rcjhz': Rcjhz = child break kv = {} for entry in Rcjhz: kv[entry.attrib["RcjId"]]=entry container = None for child in Fywj: ##child is mx if child.tag == "QdBt": if child.attrib["Mc"] == bt: container = child break if not container: container = Fywj zimu = None for child in container: if child.attrib["Qdbm"] == bm: zimu = child break box = None if not zimu: return result for child in zimu: if child.tag == "Qdxrcjhl": box = child break for child in box: result.append([child.attrib["RcjId"], kv[child.attrib["RcjId"]].attrib["RcjBm"], kv[child.attrib["RcjId"]].attrib["Mc"], kv[child.attrib["RcjId"]].attrib["Ggxh"], kv[child.attrib["RcjId"]].attrib["Dw"], kv[child.attrib["RcjId"]].attrib["Dj"], kv[child.attrib["RcjId"]].attrib["Cd"], kv[child.attrib["RcjId"]].attrib["Gycs"], kv[child.attrib["RcjId"]].attrib["Rcjlb"], kv[child.attrib["RcjId"]].attrib["Jgbz"], child.attrib["Rcjhl"], child.attrib["Rcjhj"], child.attrib["Zgjbz"], child.attrib["Zyclbz"], child.attrib["Zcbz"], child.attrib["Sbbz"] ]) return result def getDjcsDingercj_(root, bh, bt, qdbm, debm): result = [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志" ]] #result.append(["ming cheng", "jin e", "zan gu jia", "anquan wenming fei", "guifei"]) item = None for child in root: if child.tag == "Dxgcxx": for child1 in child: Dwgcbh = child1.attrib["Dwgcbh"] if Dwgcbh == bh: item = child1 break ##result.append([child.attrib["Dxgcmc"], child.attrib["Je"], child.attrib["Zgj"], child.attrib["Aqwmf"], child.attrib["Gf"]]) Fywj = None for child in item: if child.tag == 'Csxm': Fywj= child break Rcjhz = None for child in item: if child.tag == 'Rcjhz': Rcjhz = child break kv = {} for entry in Rcjhz: kv[entry.attrib["RcjId"]]=entry container = None for child in Fywj: if child.tag == "DjCs": container = child break zimu = None for child in container: if child.attrib["Bm"] == qdbm: zimu = child break box = None if not zimu: return result for child in zimu: if child.tag == "Csxdezj": box = child break hlmx_parent = None for child in box: if child.attrib["Debm"] == debm: for grandchild in child: if grandchild.tag == "Csxdercjhl": hlmx_parent = grandchild for child in hlmx_parent: result.append([child.attrib["RcjId"], kv[child.attrib["RcjId"]].attrib["RcjBm"], kv[child.attrib["RcjId"]].attrib["Mc"], kv[child.attrib["RcjId"]].attrib["Ggxh"], kv[child.attrib["RcjId"]].attrib["Dw"], kv[child.attrib["RcjId"]].attrib["Dj"], kv[child.attrib["RcjId"]].attrib["Cd"], kv[child.attrib["RcjId"]].attrib["Gycs"], kv[child.attrib["RcjId"]].attrib["Rcjlb"], kv[child.attrib["RcjId"]].attrib["Jgbz"], child.attrib["Rcjhl"], child.attrib["Rcjhj"], "", "", "", "" ]) return result def getDjcsQingdanrcj_(root, bh, bt, bm): result = [["ID", "人材机编码", "名称", "规格型号", "单位", "单价", "产地", "供应厂商", "人材机类别", "甲供标志", "含量", "合价", "暂估价标志", "主要材料标志", "主材标志", "设备标志" ]] #result.append(["ming cheng", "jin e", "zan gu jia", "anquan wenming fei", "guifei"]) item = None for child in root: if child.tag == "Dxgcxx": for child1 in child: Dwgcbh = child1.attrib["Dwgcbh"] if Dwgcbh == bh: item = child1 break ##result.append([child.attrib["Dxgcmc"], child.attrib["Je"], child.attrib["Zgj"], child.attrib["Aqwmf"], child.attrib["Gf"]]) Fywj = None for child in item: if child.tag == 'Csxm': Fywj= child break hl_parent = None for child in Fywj: if child.tag == "DjCs": hl_parent = child Rcjhz = None for child in item: if child.tag == 'Rcjhz': Rcjhz = child break kv = {} for entry in Rcjhz: kv[entry.attrib["RcjId"]]=entry zimu = None for child in hl_parent: if child.attrib["Bm"] == bm: zimu = child break box = None if not zimu: return result for child in zimu: if child.tag == "Csxrcjhl": box = child break for child in box: result.append([child.attrib["RcjId"], kv[child.attrib["RcjId"]].attrib["RcjBm"], kv[child.attrib["RcjId"]].attrib["Mc"], kv[child.attrib["RcjId"]].attrib["Ggxh"], kv[child.attrib["RcjId"]].attrib["Dw"], kv[child.attrib["RcjId"]].attrib["Dj"], kv[child.attrib["RcjId"]].attrib["Cd"], kv[child.attrib["RcjId"]].attrib["Gycs"], kv[child.attrib["RcjId"]].attrib["Rcjlb"], kv[child.attrib["RcjId"]].attrib["Jgbz"], child.attrib["Rcjhl"], child.attrib["Rcjhj"], child.attrib["Zgjbz"], child.attrib["Zyclbz"], child.attrib["Zcbz"], child.attrib["Sbbz"] ]) return result client = AsyncMongoClient() async def resolve(data): tree = ET.parse( data) root = tree.getroot() print(root) Dwgcbh = [] jingjibiao = {} jingjibiao["BiaoDuanNO"] = root.attrib["BiaoDuanNO"] jingjibiao["Jsfs"] = root.attrib["Jsfs"] jingjibiao["Version"] = root.attrib["Version"] jingjibiao["Xmmc"] = root.attrib["Xmmc"] jingjibiao["Dxgcxx"] = [] for child in root: if child.tag == "ZhaoBiaoXx": jingjibiao["ZhaoBiaoXx"] = {} jingjibiao["ZhaoBiaoXx"]["BzTime"] = child.attrib["BzTime"] jingjibiao["ZhaoBiaoXx"]["Bzr"] = child.attrib["Bzr"] jingjibiao["ZhaoBiaoXx"]["FhTime"] = child.attrib["FhTime"] jingjibiao["ZhaoBiaoXx"]["Fhr"] = child.attrib["Fhr"] jingjibiao["ZhaoBiaoXx"]["Zbr"] = child.attrib["Zbr"] jingjibiao["ZhaoBiaoXx"]["ZbrDb"] = child.attrib["ZbrDb"] jingjibiao["ZhaoBiaoXx"]["Zxr"] = child.attrib["Zxr"] jingjibiao["ZhaoBiaoXx"]["ZxrDb"] = child.attrib["ZxrDb"] elif child.tag == "TouBiaoXx": jingjibiao["TouBiaoXx"] = {} jingjibiao["TouBiaoXx"]["Zbr"] = child.attrib["Zbr"] jingjibiao["TouBiaoXx"]["Tbr"] = child.attrib["Tbr"] jingjibiao["TouBiaoXx"]["TbrDb"] = child.attrib["TbrDb"] jingjibiao["TouBiaoXx"]["Bzr"] = child.attrib["Bzr"] jingjibiao["TouBiaoXx"]["BzTime"] = child.attrib["BzTime"] jingjibiao["TouBiaoXx"]["Tbzj"] = child.attrib["Tbzj"] jingjibiao["TouBiaoXx"]["Zgj"] = child.attrib["Zgj"] jingjibiao["TouBiaoXx"]["Aqwmf"] = child.attrib["Aqwmf"] jingjibiao["TouBiaoXx"]["Gf"] = child.attrib["Gf"] elif child.tag == "Dxgcxx": Dxgcxx = {} Dxgcxx["Aqwmf"] = child.attrib["Aqwmf"] Dxgcxx["Dxgcbh"] = child.attrib["Dxgcbh"] Dxgcxx["Dxgcmc"] = child.attrib["Dxgcmc"] Dxgcxx["Gf"] = child.attrib["Gf"] Dxgcxx["Je"] = child.attrib["Je"] Dxgcxx["Zgj"] = child.attrib["Zgj"] Dxgcxx["Dwgc"] = [] for grandchild in child: if grandchild.tag == "Dwgcxx": Dwgcxx = {} Dwgcxx["DogNum"] = grandchild.attrib["DogNum"] Dwgcxx["Dwgcbh"] = grandchild.attrib["Dwgcbh"] Dwgcbh.append({"bh": grandchild.attrib["Dwgcbh"], "num": grandchild.attrib["DogNum"]}) Dwgcxx["Dwgcmc"] = grandchild.attrib["Dwgcmc"] Dwgcxx["MachineKey"] = grandchild.attrib["MachineKey"] Dwgcxx["SoftName"] = grandchild.attrib["SoftName"] Dwgcxx["SoftNum"] = grandchild.attrib["SoftNum"] Dwgcxx["Zylb"] = grandchild.attrib["Zylb"] Dxgcxx["Dwgc"].append(Dwgcxx) jingjibiao["Dxgcxx"].append(Dxgcxx) db = client["baojia"] collection = db["jingjibiao"] ##await collection.insert_one(jingjibiao) biao_id = (await collection.insert_one(jingjibiao)).inserted_id biao_id = str(biao_id) collection = db["Dwgc"] for entry in Dwgcbh: bjhz = service.getBjhz(root, entry["bh"])###array which contains __children gfsj = service.getGfsj(root, entry["bh"])##array which contains __children qtxm = service.getQtxm(root, entry["bh"])##array which contains __children zlje = service.getZlje(root, entry["bh"]) jrg = service.getJrg(root, entry["bh"]) zcbfwf = service.getZcbfwf(root, entry["bh"]) fbrgycl = service.getFbrgycl(root, entry["bh"]) rcjhz = service.getRcjhz(root, entry["bh"]) zjcs = service.getZjcs(root, entry["bh"]) qdbt = service.getQdxm(root, entry["bh"]) zygczgj = service.getZygczgj(root, entry["bh"]) Dwgc = {} Dwgc["bjhz"] = bjhz Dwgc["gfsj"] = gfsj Dwgc["qtxm"] = qtxm Dwgc["zlje"] = zlje Dwgc['zygczgj'] = zygczgj Dwgc["jrg"] = jrg Dwgc["zcbfwf"] = zcbfwf Dwgc["fbrgycl"] = fbrgycl Dwgc["rcjhz"] = rcjhz Dwgc["zjcs"] = zjcs Dwgc["qdbt"] = qdbt Dwgc["DogNum"] = entry["num"] Dwgc["Dwgcbh"] = entry["bh"] Dwgc["biao_id"] = biao_id await collection.insert_one(Dwgc) collection = db["Djcs"] for entry in Dwgcbh: djcs = service.getDjcs(root, entry["bh"]) for cs in djcs: cs["DogNum"] = entry["num"] cs["Dwgcbh"] = entry["bh"] cs["biao_id"] = biao_id rcj = getDjcsQingdanrcj_(root, entry["bh"], "", cs['清单编码']) cs["rcj"] = rcj if "__children" in cs: children = cs["__children"] for child in children: dercj = getDjcsDingercj_(root, entry["bh"], "", cs["清单编码"], child["清单编码"]) child["dercj"] = dercj child['fuzhuEnable'] = False await collection.insert_one(cs) collection = db["qdxm"] for entry in Dwgcbh: bts = service.getQdxm(root, entry["bh"]) for bt in bts: qdmx = service.getQdmx(root, entry["bh"], bt) for qd in qdmx: qd["DogNum"] = entry["num"] qd["Dwgcbh"] = entry["bh"] qd["biao_id"] = biao_id qd["bt"] = bt rcj = getQingdanrcj_(root, entry["bh"], bt, qd["清单编码"]) qd["rcj"] = rcj if "__children" in qd: children = qd["__children"] for child in children: dercj = getDingercj_(root, entry["bh"], bt, qd["清单编码"], child["清单编码"]) child["dercj"] = dercj child['fuzhuEnable'] = False await collection.insert_one(qd) import os ttt = [] for root, dirs, files in os.walk("/Users/xiaopengzhang/Downloads/qingdan/data", topdown=False): for name in files: ##print(os.path.join(root, name)) file_data = os.path.join(root, name) ttt.append(file_data) asyncio.run(resolve(ttt[0]))