рдЕрдЬрдЧрд░ SAX рдкрд╛рд░реНрд╕рд░ рдмрдирд╛рдо рдЕрдЬрдЧрд░ рдбреЛрдо рдкрд╛рд░реНрд╕рд░ред рдкрд╛рд░рд╕рд┐рдо FIAS- рдордХрд╛рди

рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ , рд╣рдордиреЗ FIAS рджреНрд╡рд╛рд░рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ xml рд╕реЗ рд╕реАрдПрд╕рд╡реА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ред рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдбреЛрдо рдкрд╛рд░реНрд╕рд░ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдереА, рдЬреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рд░реИрдо рдХреА рд╕реАрдорд┐рдд рдорд╛рддреНрд░рд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рдмрд╛рд░ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдПрд╕рдПрдПрдХреНрд╕ рдкрд╛рд░реНрд╕рд░ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ рдбреЛрдо рдкрд╛рд░реНрд╕рд░ рдХреЗ рд╕рд╛рде рдЗрд╕рдХреА рдЧрддрд┐ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред FIAS рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛, рдордХрд╛рди, рдЖрдХрд╛рд░ рдореЗрдВ 27.5 GB, рдкрд░реАрдХреНрд╖рдг рд╡рд┐рд╖рдп рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐


рд╣рдо рддреБрд░рдВрдд рд╕рдмрд╕реЗ рд╕рдореНрдорд╛рдирд┐рдд рдЬрдирддрд╛ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реИрдВ - рддреБрд░рдВрдд SAX рдкрд╛рд░реНрд╕рд░ рдХреЛ FIX рдШрд░реЛрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЦрд┐рд▓рд╛рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ред рдкрд╛рд░реНрд╕рд░ "рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЧрдард┐рдд (рдЕрдорд╛рдиреНрдп рдЯреЛрдХрди)" рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рд╢реБрд░реВ рдореЗрдВ рд╕рдВрджреЗрд╣ рдерд╛ рдХрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдЯреВрдЯ рдЧрдИ рдереАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдХрдИ рдЫреЛрдЯреЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдХрд╛рдЯрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдкреНрд░рд╕реНрдерд╛рди рдШрд░ рдХреЗ рдирдВрдмрд░реЛрдВ рдФрд░ / рдпрд╛ рдЗрдорд╛рд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреЛрдбрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рд╣реБрдЖ рдерд╛ред рдЕрд░реНрдерд╛рддреН, STRUCNUM рдпрд╛ HOUSENUM рдЯреИрдЧ рдПрдХ рдЕрдЬреАрдм рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЕрдХреНрд╖рд░ (UTF-8 рдирд╣реАрдВ рдФрд░ ANSI, рдЬрд┐рд╕рдореЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╕реНрд╡рдпрдВ рдмрдирддрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде рдШрд░реЛрдВ рдореЗрдВ рдЖрдпрд╛ рдерд╛:



рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рдпрджрд┐ рдпрд╣ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЛ remove_non_ascii рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЪрд▓рд╛рдХрд░ рд╕реАрдзрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд░рд┐рдХреЙрд░реНрдб рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рд╣реИ:



рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдХрд╛рд░рдг рдРрд╕реА рдлрд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд╢реЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдореБрдЭреЗ рдирд┐рдпрдорд┐рдд рднрд╛рд╡реЛрдВ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдерд╛ рдФрд░ рдлрд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕рд░ рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рд╛рдл рдХрд░рдирд╛ рдерд╛ред
рдкреНрд░рд╢реНрди: рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдирд╛ рдЕрд╕рдВрднрд╡ рдХреНрдпреЛрдВ рд╣реИ, рдЬреЛ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рдЫрд╛рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред

рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреА рд╢реБрд░реБрдЖрддреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдкрд░реЛрдХреНрдд рд╡рд┐рд╕рдВрдЧрддрд┐рдпреЛрдВ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рдЯреБрдХрдбрд╝реЗ рдХреЛ рд╕рд╛рдл рдХрд░рддреЗ рд╣реИрдВред

рдкрд╛рд░реНрд╕рд░ рдореЗрдВ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб:

рдХреЛрдб
from datetime import datetime import re from unidecode import unidecode start = datetime.now() f= open('AS_HOUSE.462.xml', 'r',encoding='ANSI') def remove_non_ascii(text): return unidecode(unidecode(text)) for line in f: b=remove_non_ascii(line) for c in re.finditer(r'\w{5}NUM="\d{1,}\"\w\"',b): print(c[0]) c1=c[0][:-3]+c[0][-2] print(c1) b=b.replace(c[0],c1) #    #  f1= open('out.xml', 'w',encoding='ANSI') f1.write(b) f1.close() f.close() print(datetime.now()- start) 


рдХреЛрдб xml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ non_ascii рд╡рд░реНрдгреЛрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрдорд╛рд░рддреЛрдВ рдФрд░ рдШрд░реЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ "" рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред

рд╕реИрдХреНрд╕ рдкрд╛рд░реНрд╕рд░


рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЫреЛрдЯреА xml рдлрд╝рд╛рдЗрд▓ (58.8 MB) рд▓реЗрдВ, рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдкрд░ txt рдпрд╛ csv рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ, рдкрд╛рдВрдбрд╛ рдпрд╛ рдПрдХреНрд╕реЗрд▓ рдореЗрдВ рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдХреЛрдб
 import xml.sax import csv from datetime import datetime start = datetime.now() class EventHandler(xml.sax.ContentHandler): def __init__(self,target): self.target = target def startElement(self,name,attrs): self.target.send(attrs._attrs.values()) def characters(self,text): self.target.send('') def endElement(self,name): self.target.send('') def coroutine(func): def start(*args,**kwargs): cr = func(*args,**kwargs) cr.__next__() return cr return start with open('out.csv', 'a') as f: # example use if __name__ == '__main__': @coroutine def printer(): while True: event = (yield) print(event,file=f) xml.sax.parse("out.xml", EventHandler(printer())) print(datetime.now()- start) 


рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЕрдЬрдЧрд░ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рдореВрд▓реНрдп рдорд┐рд▓рддреЗ рд╣реИрдВ:



рд▓реАрдб рд╕рдордп: 5-6 рд╕реЗрдХрдВрдбред

рдбреЛрдо рдкрд╛рд░реНрд╕рд░


рд╣рдо рдЙрд╕реА рдлрд╛рдЗрд▓ рдХреЛ рдкрд╣рд▓реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд░рдХреЗ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣реА рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ DOM рдкрд╛рд░реНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдХреЛрдб
 import codecs,os import xml.etree.ElementTree as ET import csv from datetime import datetime parser = ET.XMLParser(encoding="ANSI") tree = ET.parse("out.xml",parser=parser) root = tree.getroot() Resident_data = open('AS_HOUSE.0001.csv', 'a',encoding='ANSI') csvwriter = csv.writer(Resident_data) attr_names = [ 'HOUSEID', 'HOUSEGUID', 'AOGUID', 'HOUSENUM', 'STRUCNUM', 'STRSTATUS', 'ESTSTATUS', 'STATSTATUS', 'IFNSFL', 'IFNSUL', 'TERRIFNSFL', 'TERRIFNSUL', 'OKATO', 'OKTMO', 'POSTALCODE', 'STARTDATE', 'ENDDATE', 'UPDATEDATE', 'COUNTER', 'NORMDOC', 'DIVTYPE', 'REGIONCODE' ] start = datetime.now() object = [] for member in root.findall('House'): object = [member.attrib.get(attr_name, None) for attr_name in attr_names] csvwriter.writerow(object) Resident_data.close() print(datetime.now()- start) 


рд▓реАрдб рд╕рдордп 2-3 рд╕реЗрдХрдВрдбред
рдбреЛрдо рдкрд╛рд░реНрд╕рд░ рдЬреАрддрдирд╛?

рдмрдбрд╝реА рдлрд╛рдЗрд▓реЗрдВ


рдЫреЛрдЯреА рдлрд╛рдЗрд▓реЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред рдЖрдЗрдП 353 рдПрдордмреА (рд╕рдлрд╛рдИ рдХреЗ рдмрд╛рдж, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ) рд╕реЗ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рд▓реЗрдВред

рдХрдВрдзреЗ рдкрд░рд┐рдгрд╛рдо:

SAX рдкрд╛рд░реНрд╕рд░: 0: 00: 32.090836 - 32 рд╕реЗрдХрдВрдб
DOM рдкрд╛рд░реНрд╕рд░: 0: 00: 16.630951 - 16 рд╕реЗрдХрдВрдб

рдЕрдВрддрд░ 2 рдЧреБрдирд╛ рдЧрддрд┐ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдПрд╕рдПрдПрдХреНрд╕ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдореБрдЦреНрдп рд▓рд╛рдн рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╣рд▓реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдП рдмрд┐рдирд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ред
рдпрд╣ рдЦреЗрджрдЬрдирдХ рд╣реИ рдХрд┐ рдпрд╣ рд▓рд╛рдн FIAS рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рд░реНрдп рдЖрд╡рд╢реНрдпрдХ рд╣реИред

рдПрдирдХреЛрдбрд┐рдВрдЧ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓:
- рдкреБрд░рд╛рд▓реЗрдЦ рдореЗрдВ 353 рдПрдордмреАред

рдкрд╛рд░реНрд╕рд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╢реБрджреНрдз DB рдлрд╝рд╛рдЗрд▓:
- рдкреБрд░рд╛рд▓реЗрдЦ рдореЗрдВ 353 рдПрдордмреАред

Source: https://habr.com/ru/post/hi469995/


All Articles