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