114 lines
4.2 KiB
Python
114 lines
4.2 KiB
Python
#Aufgabe 3
|
|
import re
|
|
|
|
titel_pattern = r'([A-Z][a-zäüöß]+\.-?)+'
|
|
name_pattern = r'[A-Z][a-zäüöß]+'
|
|
vorname_pattern = r'[A-Z][a-zäüöß]+'
|
|
zweitname_pattern = r'(-{1}[A-Z][a-zäüöß]+)+'
|
|
nachname_pattern = r'\s{1}[A-Z][a-z]+'
|
|
geburtstag_pattern = r'\d{4}-\d{2}-\d{2}'
|
|
adresse_pattern = r'[A-Z][a-zäüöß]+(\s{1}\d+\,\d+\s{1}\w+)'
|
|
strasse_pattern = r'[A-Z][a-zäüöß]+\s{1}'
|
|
hausnummer_pattern = r'\s{1}\d+'
|
|
plz_pattern = r'\d{5}'
|
|
wohnort_pattern = r'\s{1}[A-Z][a-z]+'
|
|
|
|
"""titel = ''
|
|
name = ''
|
|
vorname = ''
|
|
zweitname = ''
|
|
nachname = ''
|
|
geburtstag = ''
|
|
adresse = ''
|
|
straße = ''
|
|
hausnummer = ''
|
|
plz = ''
|
|
wohnort = ''"""
|
|
|
|
counter = 0
|
|
|
|
#Datei zum Schreiben öffnen
|
|
with open('PersonenNeu.json', 'w') as f2:
|
|
#Array öffnen
|
|
f2.write('[')
|
|
#Datei zeilenweise einlesen und auswerten
|
|
with open('Personen2.txt', 'r') as f1:
|
|
for line in f1:
|
|
print(counter, ':', line)
|
|
|
|
"""line = line.replace('Ä', 'Ae')
|
|
line = line.replace('Ö', 'Oe')
|
|
line = line.replace('Ü', 'Ue')
|
|
line = line.replace('ä', 'ae')
|
|
line = line.replace('ö', 'oe')
|
|
line = line.replace('ü', 'ue')
|
|
line = line.replace('ß', 'ss')"""
|
|
#Titel, vollen Namen, volle Adresse & Geburtsdatum auslesen
|
|
titel = re.search(titel_pattern, line)
|
|
name = re.search(name_pattern, line)
|
|
adresse = re.search(adresse_pattern, line)
|
|
geburtstag = re.search(geburtstag_pattern, line)
|
|
print('Titel:', titel)
|
|
print('Name:', name)
|
|
print('Adresse:', adresse)
|
|
print('Geburtstag:', geburtstag)
|
|
|
|
#Daten aufteilen & umwandeln
|
|
#vollen Namen aufteilen in Vor-, Zweit- & Nachnamen
|
|
if name is not None:
|
|
vorname = re.search(vorname_pattern, name.group(0))
|
|
print('Vorname:', vorname)
|
|
zweitname = re.search(zweitname_pattern, name.group(0))
|
|
print('Zweitname:', zweitname)
|
|
nachname = re.search(nachname_pattern, name.group(0))
|
|
print('Nachname:', nachname)
|
|
|
|
#- und Leerzeichen entfernen und match entnehmen
|
|
if vorname is not None:
|
|
vorname = vorname.group(0)
|
|
if zweitname is not None:
|
|
zweitname = re.sub('-', '', zweitname.group(0))
|
|
if nachname is not None:
|
|
nachname = re.sub(' ', '', nachname.group(0))
|
|
|
|
#Geburtstag umwandeln
|
|
if geburtstag is not None:
|
|
geburtstag = re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\3.\2.\1', geburtstag.group(0))
|
|
|
|
#volle Adresse aufteilen in Straße, Hausnummer, PLZ & Wohnort & umwandeln
|
|
if adresse is not None:
|
|
straße = re.search(strasse_pattern, adresse.group(0))
|
|
straße = re.sub(' ', '', straße.group(0))
|
|
hausnummer = re.search(hausnummer_pattern, adresse.group(0))
|
|
hausnummer = re.sub(' ', '', hausnummer.group(0))
|
|
plz = re.search(plz_pattern, adresse.group(0))
|
|
plz = plz.group(0)
|
|
wohnort = re.search(wohnort_pattern, adresse.group(0))
|
|
wohnort = re.sub(' ', '', wohnort.group(0))
|
|
|
|
#Titel setzen, falls vorhanden
|
|
if titel is not None:
|
|
titel = titel.group(0)
|
|
|
|
#Im JSON Format eintragen
|
|
if (name is not None) and (name != 'Name') and (geburtstag is not None) and (adresse is not None):
|
|
f2.write("{\n"
|
|
"'Index': %i,\n"
|
|
"'Titel':['%s'],\n"
|
|
"'Vorname':['%s'],\n"
|
|
"'Zweitname':['%s'],\n"
|
|
"'Nachname':['%s'],\n"
|
|
"'Geburtsdatum':['%s'],\n"
|
|
"'Straße':['%s'],\n"
|
|
"'Hausnummer':['%s'],\n"
|
|
"'PLZ':['%s'],\n"
|
|
"'Wohnort':['%s'],\n"
|
|
"},\n"
|
|
% (counter, titel, vorname, zweitname, nachname, geburtstag,
|
|
straße, hausnummer, plz, wohnort)
|
|
)
|
|
counter += 1
|
|
|
|
#Array schließen
|
|
f2.write(']')
|