tungen für RegEx.e Bitte geben Sie eine Commit-Beschreibung für Ihre Änderungen ein. Zeilen,
This commit is contained in:
21
regex/filter_vornamen.py
Normal file
21
regex/filter_vornamen.py
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
from vornamen_reader import read_vornamen
|
||||||
|
import re
|
||||||
|
|
||||||
|
def print_vornamen_simple(vornamen):
|
||||||
|
for vorname in vornamen:
|
||||||
|
print(vorname)
|
||||||
|
|
||||||
|
def print_vornamen_filtered(vornameni,regex):
|
||||||
|
pattern = re.compile(regex)
|
||||||
|
for vorname in vornamen:
|
||||||
|
r = pattern.search(vorname)
|
||||||
|
# print(f"{type(r)}: {r}")
|
||||||
|
# s = re.findall(regex,vorname)
|
||||||
|
# if s[0] != '':
|
||||||
|
if pattern.match(vorname) != None:
|
||||||
|
print(vorname)
|
||||||
|
|
||||||
|
vornamen = read_vornamen('./Vornamen_Wuppertal_2020.csv')
|
||||||
|
|
||||||
|
#print_vornamen_simple(vornamen)
|
||||||
|
print_vornamen_filtered(vornamen,'O*')
|
68
regex/regex.py
Normal file
68
regex/regex.py
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
import re
|
||||||
|
import unittest
|
||||||
|
import logging
|
||||||
|
|
||||||
|
pattern_char_only = re.compile('^[A-Z][a-z]+$')
|
||||||
|
pattern_plz = re.compile('^[0-9]{5}$')
|
||||||
|
pattern_plz2 = re.compile('^\d{5}$')
|
||||||
|
pattern_quote= re.compile(':')
|
||||||
|
pattern_tab = re.compile(r'\t')
|
||||||
|
pattern_simpson = re.compile('Simpson')
|
||||||
|
|
||||||
|
logging.basicConfig( format='%(asctime)-15s [%(levelname)s] %(funcName)s: %(message)s', level=logging.DEBUG)
|
||||||
|
class TestRegEgEx(unittest.TestCase):
|
||||||
|
def test_match(self):
|
||||||
|
m = pattern_char_only.match('Olli')
|
||||||
|
|
||||||
|
logging.debug(f'm={m}')
|
||||||
|
self.assertIsNotNone(m)
|
||||||
|
|
||||||
|
def test_findall(self):
|
||||||
|
m = pattern_char_only.findall('Olli')
|
||||||
|
logging.debug(f'm={m}')
|
||||||
|
self.assertIsNotNone(m)
|
||||||
|
|
||||||
|
def test_plz(self):
|
||||||
|
patterns = [pattern_plz,pattern_plz2]
|
||||||
|
plz = ['42275','5600']
|
||||||
|
|
||||||
|
for pattern in patterns:
|
||||||
|
m = pattern.findall(plz[0])
|
||||||
|
logging.debug(f'm={m}')
|
||||||
|
self.assertNotEqual('',m[0])
|
||||||
|
m = pattern.findall(plz[1])
|
||||||
|
logging.debug(f'm={m}')
|
||||||
|
self.assertEqual([],m)
|
||||||
|
|
||||||
|
|
||||||
|
def test_search(self):
|
||||||
|
m = pattern_char_only.search('Olli')
|
||||||
|
logging.debug(f'm={m}')
|
||||||
|
self.assertIsNotNone(m)
|
||||||
|
|
||||||
|
m = pattern_char_only.search('123456')
|
||||||
|
logging.debug(f'm={m}')
|
||||||
|
self.assertIsNone(m)
|
||||||
|
|
||||||
|
def test_split(self):
|
||||||
|
m = pattern_quote.split('Die:Würde:des:Menschen:ist:unantastbar.')
|
||||||
|
logging.debug(f'm={m}')
|
||||||
|
self.assertIsNotNone(m)
|
||||||
|
|
||||||
|
def test_sub(self):
|
||||||
|
m = pattern_tab.sub(' ','Satz\tmit\tTabulator.')
|
||||||
|
logging.debug(f'm={m}')
|
||||||
|
|
||||||
|
def test_finditer(self):
|
||||||
|
m = pattern_simpson.finditer('Homer Simpson, Marge Simpson, Bart Simpson, Lisa Simpson, Maggie Simpson')
|
||||||
|
logging.debug(f'm={m}')
|
||||||
|
|
||||||
|
for name in m:
|
||||||
|
logging.debug(f'Name={name}')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
unittest.main()
|
||||||
|
|
50
regex/vornamen_reader.py
Normal file
50
regex/vornamen_reader.py
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
#encoding: utf-8
|
||||||
|
import re
|
||||||
|
|
||||||
|
def read_vornamen(filename):
|
||||||
|
dict = {}
|
||||||
|
# Der Zähler dient nur dazu, die erste Zeile zu überspringen
|
||||||
|
count = 0
|
||||||
|
pattern_csv = re.compile(';')
|
||||||
|
|
||||||
|
|
||||||
|
dict['mädchen'] = 0
|
||||||
|
dict['jungs'] = 0
|
||||||
|
dict['divers'] = 0
|
||||||
|
with open(filename,'r') as f:
|
||||||
|
for zeile in f:
|
||||||
|
if count >0:
|
||||||
|
# einzelne Zeile in seine Bestandteile zerlegen
|
||||||
|
splitted = pattern_csv.split(zeile.strip())
|
||||||
|
anzahl = splitted[0]
|
||||||
|
vorname = splitted[1]
|
||||||
|
geschlecht= splitted[2]
|
||||||
|
position = splitted[3]
|
||||||
|
|
||||||
|
if geschlecht == 'w':
|
||||||
|
dict['mädchen'] += 1
|
||||||
|
elif geschlecht == 'm':
|
||||||
|
dict['jungs'] += 1
|
||||||
|
else:
|
||||||
|
dict['divers'] += 1
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
data = {}
|
||||||
|
data['vorname'] = vorname
|
||||||
|
data['anzahl'] = int(anzahl)
|
||||||
|
data['geschlecht'] = geschlecht
|
||||||
|
data['position'] = position
|
||||||
|
if vorname not in dict:
|
||||||
|
dict[vorname] = data
|
||||||
|
else:
|
||||||
|
# doppelte Einträge summieren wir auf.
|
||||||
|
e = dict[vorname]
|
||||||
|
e['anzahl'] = int(anzahl) + (e['anzahl'])
|
||||||
|
count +=1
|
||||||
|
|
||||||
|
gesamt = dict['jungs'] + dict['mädchen'] + dict['divers']
|
||||||
|
|
||||||
|
dict['gesamt'] = gesamt
|
||||||
|
return dict
|
||||||
|
|
Reference in New Issue
Block a user