Code lesen von faker, einer Bibliothek, die Testdaten in Python generiert

Einführung

Während dieser Zeit veröffentlichte @TakesxiSximada einen Artikel Code lesen von Safe, einer Bibliothek zum Überprüfen der Kennwortstärke in Python, also habe ich es selbst versucht. Ich tat.

Also nahm ich eine Bibliothek namens faker, die ich schon seit einiger Zeit nutzen wollte.

faker ist eine Bibliothek, die Dummy-Testdaten gut generiert. Dies ist die Python-Version derjenigen, die Sie häufig in anderen Sprachen sehen.

https://pypi.python.org/pypi/fake-factory/0.5.3 https://github.com/joke2k/faker

Install Sie können es mit pip installieren.

$ pip install fake-factory

Probieren Sie den README-Beispielcode aus

>>> from faker import Factory

Und es ist in Ordnung, wenn Sie einen Generator generieren, der Testdaten erstellt.

>>> fake = Factory.create()

Danach werden die Testdaten wie folgt zurückgegeben.

>>> fake.name()
'Anfernee Reichel'
>>> fake.address()
'084 Tiney Fork Suite 757\nPort Earl, MI 20240-1776'
>>> fake.text()
'Facilis non eligendi qui deleniti ullam est. Ab minus est non et occaecati laborum sequi. Vero consectetur repellendus dicta velit. Quisquam omnis alias error sed totam.'

Es unterstützt auch die Mehrsprachigkeit und kann realisiert werden, indem "locale" als Argument an "Factory.create ()" übergeben wird.

>>> fake = Factory.create('ja_JP')
>>> fake.name()
'Yumiko Tsuda'
>>> fake.address()
'32-22-3 Shiba Park, Chuo-ku, Präfektur Gunma Kamihiroya Heights 400'
>>> fake.text()
'Non ut in unde ipsa fugiat excepturi voluptate. Enim molestias voluptatem aperiam. Est fuga distinctio sit officia qui velit numquam sint.'

Japanische Daten wurden nicht für Text vorbereitet, daher werden die Standarddaten "en_US" zurückgegeben.

"Fake" ist übrigens eine Instanz von "faker.generator.Generator ()".

>>> type(fake)
<class 'faker.generator.Generator'>

Code lesen

Dann möchte ich den Code lesen, Vorher ist es schneller zu verstehen, wer der Provider ist, also werde ich den Provider zuerst erklären.

Vom Anbieter bereitgestellte Testdaten

Jeder Anbieter wird unter faker / faker / provider gespeichert.

├── providers
│   ├── __init__.py
│   ├── __pycache__
│   ├── address
│   ├── barcode
│   ├── color
│   ├── company
│   ├── credit_card
│   ├── currency
│   ├── date_time
│   ├── file
│   ├── internet
│   ├── job
│   ├── lorem
│   ├── misc
│   ├── person
│   ├── phone_number
│   ├── profile
│   ├── python
│   ├── ssn
│   └── user_agent

Für jede Kategorie wie "Adresse" und "Barcode" werden ein Verzeichnis implementiert, das jeder Sprache entspricht, und ein Anbieter, der die Basis jeder Kategorie bildet.

Hier konzentrieren wir uns auf "Person" und folgen der Quelle. Der Untergebene von "Person" sieht so aus.

├── providers
│   ├── __init__.py
│   ├── person
│   │   ├── __init__.py
│   │   ├── bg_BG
│   │   ├── cs_CZ
│   │   ├── de_AT
│   │   ├── de_DE
│   │   ├── dk_DK
│   │   ├── el_GR
│   │   ├── en
│   │   ├── en_US
│   │   ├── es_ES
│   │   ├── es_MX
│   │   ├── fa_IR
│   │   ├── fi_FI
│   │   ├── fr_FR
│   │   ├── hi_IN
│   │   ├── hr_HR
│   │   ├── it_IT
│   │   ├── ja_JP
│   │   ├── ko_KR
│   │   ├── lt_LT
│   │   ├── lv_LV
│   │   ├── ne_NP
│   │   ├── nl_NL
│   │   ├── no_NO
│   │   ├── pl_PL
│   │   ├── pt_BR
│   │   ├── pt_PT
│   │   ├── ru_RU
│   │   ├── sl_SI
│   │   ├── sv_SE
│   │   ├── tr_TR
│   │   ├── uk_UA
│   │   ├── zh_CN
│   │   └── zh_TW

Schauen Sie sich als Nächstes __init __. Py direkt unter / faker / provider / person an. schauen.

from .. import BaseProvider


class Provider(BaseProvider):
    formats = ['{{first_name}} {{last_name}}', ]

    first_names = ['John', 'Jane']

    last_names = ['Doe', ]

    def name(self):
        """
        :example 'John Doe'
        """
        pattern = self.random_element(self.formats)
        return self.generator.parse(pattern)

    @classmethod
    def first_name(cls):
        return cls.random_element(cls.first_names)

    @classmethod
    def last_name(cls):
        return cls.random_element(cls.last_names)
        
    #Unten weggelassen

Auf diese Weise wird der Anbieter implementiert, der die Basis des Personenanbieters jeder Sprache bildet. Es erbt BaseProvider, das Klassenmethoden implementiert, die Daten zufällig extrahieren, wie z. B. random_element (). Sie können sehen, dass.

Erben Sie dann diesen Anbieter und erstellen Sie neue Eigenschaften und Methoden oder überschreiben Sie diese, um Anbieter vorzubereiten, die jeder Sprache entsprechen. Informationen zum japanisch kompatiblen Personenanbieter finden Sie im Folgenden. https://github.com/joke2k/faker/blob/master/faker/providers/person/ja_JP/init.py

Factory.create () - Generator erstellen

https://github.com/joke2k/faker/blob/master/faker/factory.py#L14-L44

Diese Methode erstellt eine Instanz von "<class'faker.generator.Generator"> und gibt sie zurück.

Im folgenden Prozess wird jeder Provider in "faker" gesetzt, einer Instanz von "<class'faker.generator.Generator"> "basierend auf" locale ", die als Argument von" Factory.create () "übergeben wurde. Ich werde. (Wenn es keinen Anbieter gibt, der dem angegebenen "Gebietsschema" entspricht, wird der mit DEFAULT_LOCALE "en_US" festgelegt.)

for prov_name in as:
    if prov_name == 'faker.as':
        continue

    prov_cls, lang_found = cls._get_provider_class(prov_name, locale)
    provider = prov_cls(faker)
    provider.__provider__ = prov_name
    provider.__lang__ = lang_found
    faker.add_provider(provider)

Schauen wir uns als nächstes den "add_provider (provider)" an, der im obigen Prozess herausgekommen ist.

Generator.add_provider () - Format zum Generator hinzufügen

https://github.com/joke2k/faker/blob/master/faker/generator.py#L22-L39

Die vom Provider definierte öffentliche Methode (z. B. <Faker.providers.person.ja_JP.Provider>), die als Argument übergeben wurde, wird dem Generatorformat hinzugefügt.

Generator.set_formatter () - Wrapper-Funktion für setattr ()

https://github.com/joke2k/faker/blob/master/faker/generator.py#L70-L75 Das Wortformat erschien plötzlich bei "Generator.add_provider ()", aber ich mache nur setattr () für die Generator-Instanz.

Zusammenfassung

Mit Factory.create (), wie wir bisher gesehen haben Sie können eine Instanz von "<class'faker.generator.Generator"> mit allen öffentlichen Methoden abrufen, die in der Provider-Gruppe jeder in Attributen festgelegten Sprache definiert sind. Dank dessen wird einfach durch Aufrufen von "fake.method_name ()" wie unten gezeigt "method_name ()" ausgeführt, das im Provider jeder Sprache implementiert ist, und es können zufällige Testdaten abgerufen werden. Ich bin.

>>> fake.name()
'Anfernee Reichel'

schließlich

Ich bin erschöpft und folge nur dem Teil Factory.create (), aber wenn Sie verstehen, wie man einen Generator generiert, wissen Sie, wie Sie diese Bibliothek auf andere Weise verwenden können. Das Lesen von Code mit einer so dünnen Bibliothek wird empfohlen, da es einfach anzuhängen war und Spaß machte!

Nachwort

Während des Schreibens dieses Artikels "[PersonProvider] von" ja_JP "(https://github.com/joke2k/faker/blob/master/faker/providers/person/ja_JP/init.py) enthält das japanische Format" name () " Aus diesem Grund werden "Benutzername ()" und "Domänenwort ()" nicht richtig angezeigt. " Ich bin auf das Problem gestoßen. https://github.com/joke2k/faker/blob/master/faker/providers/internet/init.py#L27-L32 https://github.com/joke2k/faker/blob/master/faker/providers/internet/init.py#L90-L95

Er gab eine PR heraus, um das oben genannte Problem zu lösen, und fusionierte sicher. https://github.com/joke2k/faker/pull/300

Recommended Posts

Code lesen von faker, einer Bibliothek, die Testdaten in Python generiert
Codelesen von Safe, einer Bibliothek zur Überprüfung der Kennwortstärke in Python
Aufgezeichnete Umgebung für die Datenanalyse mit Python
Code lesen von m3u8, einer Bibliothek zum Bearbeiten von m3u8-Dateien im HLS-Videoformat mit Python
Erstellen Sie den Code, der in Python "A und vorgeben B" ausgibt
Eine Reihe von Skriptdateien, die Wordcloud mit Python3 ausführen
[Python] Erstellen eines GUI-Tools, das die CSV von Temperaturanstiegsdaten in Excel automatisch verarbeitet
Python-Skript, das MLB-Spieldaten im Wert von 15 Jahren in 10 Minuten in MySQL speichert (Baseball Hack!)
Eine einfache Datenanalyse von Bitcoin, die von CoinMetrics in Python bereitgestellt wird
Verwenden Sie networkx, eine Bibliothek, die Diagramme in Python verarbeitet (Teil 2: Lernprogramm).
Über psd-tools, eine Bibliothek, die psd-Dateien in Python verarbeiten kann
Eine Funktion, die die Verarbeitungszeit einer Methode in Python misst
Wie erstelle ich eine große Menge an Testdaten in MySQL? ??
Zeigen Sie eine Liste der Alphabete in Python 3 an
Generieren Sie japanische Testdaten mit Python faker
Einführung einer Bibliothek, die unter Python / Windows nicht in pip enthalten war
[Python] Ich habe einen einfachen Code geschrieben, der automatisch AA generiert (Ascii Art).
Python-E-Book-Zusammenfassung nützlich für die frei lesbare Datenanalyse
[DSU] Lesen der AtCoder-Bibliothek mit Green Coder ~ Implementierung in Python ~
Erstellt Simple SQLite, eine Python-Bibliothek, die das Erstellen / Einfügen von SQLite-Tabellen vereinfacht
Erstellen wir eine Kundendatenbank, in der QR-Code automatisch in Python ausgegeben wird
Einführung von "Scikit-Mobility", einer Bibliothek, mit der Sie menschliche Flussdaten mit Python einfach analysieren können (Teil 1)
Erstellen Sie in 1 Minute eine Vim + Python-Testumgebung
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
Erstellen Sie solche Testdaten mit Python (Teil 1)
Ein Memo, das ich schnell in Python geschrieben habe
Holen Sie sich den Aufrufer einer Funktion in Python
Ich habe PyQCheck, eine Bibliothek, die QuickCheck mit Python ausführen kann, in PyPI registriert.
Ein Programm, das doppelte Anweisungen in Python entfernt
Kopieren Sie die Liste in Python
Echtzeitvisualisierung von Thermografie AMG8833-Daten in Python
Richten Sie einen Test-SMTP-Server in Python ein.
Umschreiben von Elementen in einer Listenschleife (Python)
Datenanalyse in Python: Ein Hinweis zu line_profiler
Machen Sie mit Python eine Joyplot-ähnliche Handlung von R.
Ausgabe in Form eines Python-Arrays
Lassen Sie uns einen Teil des maschinellen Lernens mit Python berühren
Grundlegende Datenrahmenoperationen, die von Anfängern in einer Woche Python-Lernen geschrieben wurden
Ein Memo zum Generieren dynamischer Klassenvariablen aus Wörterbuchdaten (dict), die in Python3 nur Standardtypdaten enthalten
Zusammenfassung der statistischen Datenanalysemethoden mit Python, die im Geschäftsleben verwendet werden können
Ein Hinweis zur Bibliotheksimplementierung, in der Hyperparameter mithilfe der Bayes'schen Optimierung in Python untersucht werden
[Python] Ein Programm, das die kürzeste Anzahl von Schritten in einem Spiel findet, das Wolken überquert
Ein Hinweis, der einen Job in Python implementiert, der eine GCS-Datei in BigQuery lädt
Einfacher Code, der in Kaggles Titanic: Maschinelles Lernen aus Katastrophen eine Punktzahl von 0,81339 ergibt
Programm, das die CSV-Daten der Transaktionshistorie der SBI Securities-Aktie zusammenfasst [Python3]
Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
Lesen von CSV-Daten aus dem Python-Code des DSX-Objektspeichers
[Python] Ein Programm, das die Anzahl der Täler zählt
Zusammenfassung der Tools, die zum Analysieren von Daten in Python benötigt werden
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Empfangen Sie Wörterbuchdaten von Python-Programmen mit AppleScript
Schreiben wir Python-Code, der Go-Code analysiert und Go-Code generiert
Ein Memorandum beim Schreiben von experimentellem Code ~ Anmelden in Python
#Eine Funktion, die den Zeichencode einer Zeichenfolge zurückgibt
Ruby, Python-Codefragment Ausführung der Auswahl in Emacs
Ein Liner, der mit Python ein Umfangsverhältnis von 1000000 Stellen ausgibt
Ein schneller Vergleich der Testbibliotheken von Python und node.js.
Was ist in dieser Variablen (wenn das Python-Skript ausgeführt wird)?