122 lines
3.5 KiB
Python
122 lines
3.5 KiB
Python
#Aufgabe 3
|
|
import codecs
|
|
import re
|
|
|
|
titel_pattern = r'([A-Z][a-zäüöß]+\.-?)+'
|
|
vorname_pattern = r'[A-Z][a-zäüöß]+[\s-]'
|
|
zweitname_pattern = r'(-[A-Z][a-zäüöß]+)+\s'
|
|
nachname_pattern = r'\s[A-Z][a-zäüöß]+$'
|
|
straße_pattern = r'([A-Z][a-zäüöß]+[\s-]?)+'
|
|
hausnummer_pattern = r'\s{1}\d+'
|
|
plz_pattern = r'\d{5}'
|
|
wohnort_pattern = r'(\s[A-Z][a-zäüöß]+)+'
|
|
|
|
counter = 0
|
|
|
|
#Datei einlesen ab 2.Zeile
|
|
f1 = codecs.open('Personen.txt', 'r', 'utf-8')
|
|
lines = f1.readlines()[1:]
|
|
f1.close()
|
|
|
|
#Datei zum Schreiben öffnen
|
|
with open('PersonenNeu.json', 'w') as f2:
|
|
#Array öffnen
|
|
f2.write('[')
|
|
#Daten zeilenweise einlesen und auswerten
|
|
for line in lines:
|
|
entry = line.split(',')
|
|
#print(entry[0])
|
|
#print(entry[1])
|
|
#print(entry[2])
|
|
#print(entry[3])
|
|
#print(entry[4])
|
|
#print(counter, ':', line)
|
|
|
|
#Titel
|
|
titel = re.search(titel_pattern, entry[0])
|
|
#print(titel)
|
|
# Titel setzen, falls vorhanden
|
|
if titel is not None:
|
|
titel = titel.group(0)
|
|
#print(titel)
|
|
|
|
#Vorname
|
|
vorname = re.search(vorname_pattern, entry[0])
|
|
#print(vorname)
|
|
|
|
#Zweitname
|
|
zweitname = re.search(zweitname_pattern, entry[0])
|
|
#print(zweitname)
|
|
|
|
#Nachname
|
|
nachname = re.search(nachname_pattern, entry[0])
|
|
#print(nachname)
|
|
|
|
#- und Leerzeichen entfernen und match entnehmen
|
|
if vorname is not None:
|
|
vorname = re.sub('-', '', vorname.group(0), 1)
|
|
#print(vorname)
|
|
if zweitname is not None:
|
|
zweitname = re.sub('-', '', zweitname.group(0), 1)
|
|
#print(zweitname)
|
|
zweitname = re.sub(' ', '', zweitname)
|
|
#print(zweitname)
|
|
if nachname is not None:
|
|
nachname = re.sub(' ', '', nachname.group(0), 1)
|
|
#print(nachname)
|
|
|
|
#Geburtstag setzen & umwandeln
|
|
geburtstag = entry[3]
|
|
#print(geburtstag)
|
|
if geburtstag is not None:
|
|
geburtstag = re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\3.\2.\1', geburtstag)
|
|
#print(geburtstag)
|
|
|
|
#Straße
|
|
straße = re.search(straße_pattern, entry[1])
|
|
#print(straße)
|
|
straße = re.sub(' ', '', straße.group(0))
|
|
#print(straße)
|
|
|
|
#Hausnummer
|
|
hausnummer = re.search(hausnummer_pattern, entry[1])
|
|
#print(hausnummer)
|
|
hausnummer = re.sub(' ', '', hausnummer.group(0), 1)
|
|
#print(hausnummer)
|
|
|
|
#PLZ
|
|
plz = re.search(plz_pattern, entry[2])
|
|
#print(plz)
|
|
plz = plz.group(0)
|
|
#print(plz)
|
|
|
|
#Wohnort
|
|
wohnort = re.search(wohnort_pattern, entry[2])
|
|
#print(wohnort)
|
|
wohnort = re.sub(' ', '', wohnort.group(0), 1)
|
|
#print(wohnort)
|
|
|
|
#Im JSON Format eintragen
|
|
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"
|
|
% (counter, titel, vorname, zweitname, nachname, geburtstag,
|
|
straße, hausnummer, plz, wohnort)
|
|
)
|
|
|
|
if counter < (len(lines) - 1):
|
|
f2.write("},\n")
|
|
#Array schließen
|
|
else:
|
|
f2.write("}\n]")
|
|
|
|
counter += 1
|