Gemeinden
This commit is contained in:
32
data/plz.py
32
data/plz.py
@ -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!')
|
||||
|
Reference in New Issue
Block a user