Gemeinden

This commit is contained in:
2022-11-29 22:46:52 +01:00
parent f520c64052
commit 6e991ce019
2 changed files with 312 additions and 22 deletions

View File

@ -12,6 +12,8 @@ import os
URL = 'https://www.post.at/g/c/postlexikon'
BUTTON = re.compile(r'title="PLZ Bestimmungsort" href="(.*?)"')
Row = Tuple[int, str, int, str, int, str]
def get_excel_url() -> str:
r = requests.get(URL, headers={'User-Agent': 'Mozilla/5.0'})
@ -25,7 +27,7 @@ def get_excel_url() -> str:
return matches[0]
def download_excel() -> List[Tuple[int, str, int, str, int, str]]:
def download_excel() -> List[Row]:
f_name = None
try:
f = tempfile.NamedTemporaryFile(delete=False)
@ -49,33 +51,19 @@ def download_excel() -> List[Tuple[int, str, int, str, int, str]]:
os.remove(f_name)
def write_sql(data: List[Tuple[int, str, int, str, int, str]]) -> None:
gemeinden = {gkz: name for _, _, _, _, gkz, name in data}
orte = {okz: (name, gkz) for _, _, okz, name, gkz, _ in data}
def write_sql(data: List[Row]) -> None:
with open('plz.sql', 'wb') as f:
f.write(b'\n')
f.write(b"INSERT INTO AT_gemeinde VALUES\n")
for gem_nr, gem_name in gemeinden.items():
f.write(f"({gem_nr}, {gem_nr // 10000}, '{gem_name}'),\n".encode('utf8'))
f.seek(-2, 1)
f.write(b';\n\n')
f.write(b"INSERT INTO AT_ort VALUES\n")
for okz, (name, gkz) in orte.items():
f.write(f"({okz:5}, {gkz}, '{name.replace(',', ', ').replace('.Bez.:', '. Bez.: ')}'),\n".encode('utf8'))
f.seek(-2, 1)
f.write(b';\n\n')
f.write(b"INSERT INTO AT_plz VALUES\n")
f.write(b"\nINSERT INTO AT_plz VALUES\n")
for plz, dest, okz, _, _, _ in data:
f.write(f"({plz}, {okz:5}, {100000 * plz + okz}, '{dest}'),\n".encode('utf8'))
f.write(f"({plz:4}, {okz:5}, '{dest}'),\n".encode('utf8'))
f.seek(-2, 1)
f.write(b';\n\n')
f.write(b';\n')
if __name__ == '__main__':
parser = argparse.ArgumentParser()
args = parser.parse_args()
print('Downloading PLZ data from www.post.at')
write_sql(download_excel())
print('Successfully created plz.sql!')