Im Artikel „Test-Daten generieren mit Faker„ wurde die Möglichkeit vorgestellt, wie man mit dem Modul Faker Testdaten generieren kann.
Eine Alternative ist die Bibliothek Mimesis. Dieses Modul ist in der Massendaten-Erstellung deutlich schneller als Faker, und je nach Localization (Locale) auch besser in der Datenqualität bezüglich der Eindeutigkeit. Außerdem bietet Mimesis mehr Kategorien (Provider) als Faker, einige sind von der Localization abhängig, einige sind unabhängige Bereiche.
Die ausführliche Beschreibung, welche Daten man erzeugen kann, und wie Mimesis im Einzelnen funktioniert, findet man in der offiziellen Anleitung.
Die Installation erfolgt standardmäßig über pip: pip3 install mimesis
Hier ein paar Beispiele für eine Basis-Verwendung:
vollständiger Name, abhängig vom Geschlecht
from mimesis import Person from mimesis.locales import Locale from mimesis.enums import Gender person = Person(Locale.DE) full_name = person.full_name() # zufällig weibl. oder männl. print(full_name) female_name = person.full_name(gender=Gender.FEMALE) print(female_name) male_name = person.full_name(gender=Gender.MALE) print(male_name)
Ausgabe:
Adolf Adam Gundula Fenstermacher Walter Jung
Adresse und Region (Staat, Bezirk)
Es gibt synonyme Methoden, die dieselbe Bedeutung haben: region, federal_subject, province, prefecture als alias von state
Damit kann der Code lesbarer gestaltet werden, wenn man für die jeweilige Locale die aussagekräftige Methode verwendet, z.B. für DE region und für FR province, oder für EN state.
from mimesis import Address from mimesis.locales import Locale de = Address(Locale.DE) gb = Address(Locale.EN_GB) # EN_GB steht für Britisch; EN ist US, und Standard ru = Address(Locale.RU) de_address = de.address() print(de_address) de_region = de.region() print(de_region) print() gb_address = gb.address() print(gb_address) gb_state = gb.state() print(gb_state) print() ru_address = ru.address() print(ru_address) ru_federal_subject = ru.federal_subject() print(ru_federal_subject) print()
Ausgabe:
Gebertstraße 1164 Hessen 1153 Ballysculty Creek Staffordshire Аллея Новая 1102 Астраханская область
Manchmal benötigt man nur einige Daten aus einem anderen Gebietsschema, dann kann man die Erstellung einer neuen Instanz vermeiden, in dem man das aktuelle Gebietsschema temporär mit dem Locale des anderen Provider überschreibt. from mimesis import Person from mimesis.locales import Locale person = Person(locale=Locale.DE) full_name = person.full_name() with person.override_locale(Locale.FR): degree = person.academic_degree() print(f'{degree} {full_name}')
Ausgabe:
Doctorat Senta Möller
Wenn man nur Daten für ein einziges Gebietsschema generieren muss, kann man den den Generic()-Provider verwenden, damit hat man Zugriff auf alle Mimesis-Provider. from mimesis import Generic from mimesis.locales import Locale generic_provider = Generic(locale=Locale.ES) month = generic_provider.datetime.month() print(month) company = generic_provider.finance.company() print(company) address = generic_provider.address.country() print(address) fruit = generic_provider.food.fruit() print(fruit)
Ausgabe:
Diciembre Vueling Airlines España Pera