[PYTHON] Résumé des outils et bibliothèques OSS créés en 2016

Présentation et exemples des OSS suivants créés en 2016, respectivement

Outil CLI

sqlitebiter Un outil pour convertir CSV / ʻExcel / HTML/JSON / LTSV/Markdown / TSV/Google Sheets en fichiers de base de données SQLite`. Vous pouvez également convertir à partir de l'URL spécifiée.

from-file


$ ls
sample_data.csv  sample_data.xlsx  sample_data_multi.json  sample_data_single.json
$ sqlitebiter file * -o sample.sqlite
[INFO] convert 'sample_data.csv' to 'sample_data' table
[INFO] convert 'sample_data.xlsx' to 'samplesheet1' table
[INFO] convert 'sample_data.xlsx' to 'samplesheet3' table
[INFO] convert 'sample_data_multi.json' to 'sample_data_multi_table_b' table
[INFO] convert 'sample_data_multi.json' to 'sample_data_multi_table_a' table
[INFO] convert 'sample_data_single.json' to 'sample_data_single_json3' table
$ ls sample.sqlite
sample.sqlite

from-URL


$ sqlitebiter -v url "https://en.wikipedia.org/wiki/Comparison_of_firewalls"
[INFO] convert 'https://en.wikipedia.org/wiki/Comparison_of_firewalls' to 'Comparison_of_firewalls_Wikipedia_html1 (Firewall TEXT, License TEXT, CostUsageLimits TEXT, OS TEXT)' table
[INFO] convert 'https://en.wikipedia.org/wiki/Comparison_of_firewalls' to 'Comparison_of_firewalls_Wikipedia_html2 (Firewall TEXT, License TEXT, Cost TEXT, OS TEXT)' table
[INFO] convert 'https://en.wikipedia.org/wiki/Comparison_of_firewalls' to 'Comparison_of_firewalls_Wikipedia_html3 (CanTarget TEXT, Changingdefaultpolicytoacceptrejectbyissuingasinglerule TEXT, IPdestinationaddresses TEXT, IPsourceaddresses TEXT, TCPUDPdestinationports TEXT, TCPUDPsourceports TEXT, EthernetMACdestinationaddress TEXT, EthernetMACsourceaddress TEXT, Inboundfirewallingress TEXT, Outboundfirewallegress TEXT)' table
[INFO] convert 'https://en.wikipedia.org/wiki/Comparison_of_firewalls' to 'Comparison_of_firewalls_Wikipedia_html4 (Can TEXT, [workatOSILayer4statefulfirewall] TEXT, [workatOSILayer7applicationinspection] TEXT, ChangeTTLTransparenttotraceroute TEXT, ConfigureREJECTwithanswer TEXT, DMZdemilitarizedzoneallowsforsingleseveralhostsnottobefirewalled TEXT, Filteraccordingtotimeofday TEXT, RedirectTCPUDPportsportforwarding TEXT, RedirectIPaddressesforwarding TEXT, FilteraccordingtoUserAuthorization TEXT, TrafficratelimitQoS TEXT, Tarpit TEXT, Log TEXT)' table
[INFO] convert 'https://en.wikipedia.org/wiki/Comparison_of_firewalls' to 'Comparison_of_firewalls_Wikipedia_html5 (Features TEXT, ConfigurationGUItextorbothmodes TEXT, [RemoteAccessWebHTTPTelnetSSHRDPSerialCOMRS232] TEXT, Changeruleswithoutrequiringrestart TEXT, Abilitytocentrallymanageallfirewallstogether TEXT)' table
[INFO] convert 'https://en.wikipedia.org/wiki/Comparison_of_firewalls' to 'Comparison_of_firewalls_Wikipedia_html6 (Features TEXT, Modularitysupportsthirdpartymodulestoextendfunctionality TEXT, [IPS : Intrusion prevention system] TEXT, OpenSourceLicense TEXT, [supports IPv6 ?] TEXT, ClassHomeProfessional TEXT, OperatingSystemsonwhichitruns TEXT)' table
[INFO] convert 'https://en.wikipedia.org/wiki/Comparison_of_firewalls' to 'Comparison_of_firewalls_Wikipedia_html7 (Can TEXT, [NAT44staticdynamicwoportsPAT] TEXT, [NAT64NPTv6] TEXT, IDSIntrusionDetectionSystem TEXT, VPNVirtualPrivateNetwork TEXT, AVAntiVirus TEXT, Sniffer TEXT, Profileselection TEXT)' table

tcconfig Un outil d'encapsulation pour la commande de contrôle de la bande passante du réseau tc. Je l'ai fait parce que j'ai immédiatement oublié le format de réglage de tc. Les trois types de commandes suivants sont inclus.

-- tcset: réglage du filtre tc -- tcdel: filtre tc supprimé -- tcshow: Afficher les paramètres actuels tc

tcset peut filtrer les paquets entrants et sortants.

tcconfig-example


# tcset --device eth0 --delay 10 --delay-distro 2  --loss 0.01 --rate 0.25M --network 192.168.0.10 --port 8080
# tcset --device eth0 --delay 1 --loss 0.02 --rate 500K --direction incoming
# tcshow --device eth0
{
    "eth0": {
        "outgoing": {
            "network=192.168.0.10/32, port=8080": {
                "delay": "10.0",
                "loss": "0.01",
                "rate": "250K",
                "delay-distro": "2.0"
            },
            "network=0.0.0.0/0": {}
        },
        "incoming": {
            "network=0.0.0.0/0": {
                "delay": "1.0",
                "loss": "0.02",
                "rate": "500K"
            }
        }
    }
}

Bibliothèque Python

pytablewriter Une bibliothèque pour écrire des tableaux. Prend en charge les caractères multi-octets.

Formats pris en charge: CSV / HTML / JavaScript / JSON / LTSV / Markdown / MediaWiki / ʻExcel / Pandas/Python / reStructuredText/TOML/TSV`.

-example


import io
import pytablewriter

writer = pytablewriter.MarkdownTableWriter()
writer.table_name = u"Modèles de génération".encode("utf_8")
writer.header_list = [u"Nom du motif".encode("utf_8"), "Aperçu", "GoF", "Code Complete[1]"]
writer.value_matrix = [
    ["Abstract Factory", u"Il fournit un moyen de générer de manière appropriée un ensemble d'instances associées en fonction de la situation.".encode("utf_8"), "Yes", "Yes"],
    ["Builder", "Masquez le processus de création d'une instance complexe.", "Yes", "No"],
    ["Factory Method", "Fournit une méthode de création d'une instance qui ne dépend pas de l'instance réellement créée.", "Yes", "Yes"],
    ["Prototype", "Dupliquez l'instance de prototype pour créer une instance similaire.", "Yes", "No"],
    ["Singleton", "Garantissez une seule instance pour une classe.", "Yes", "Yes"],
]

with io.open("multibyte_table_output.txt", "w", encoding="utf-8") as f:
    writer.stream = f
    writer.write_table()

multibyte_table_output.txt


#Modèles de génération
Nom du motif|Aperçu|GoF|Code Complete[1]
----------------|----------------------------------------------------------------------------|---|----------------
Abstract Factory|Il fournit un moyen de générer de manière appropriée un ensemble d'instances associées en fonction de la situation.|Yes|Yes             
Builder         |Masquez le processus de création d'une instance complexe.|Yes|No              
Factory Method  |Fournit une méthode de création d'une instance qui ne dépend pas de l'instance réellement créée.|Yes|Yes             
Prototype       |Dupliquez l'instance de prototype pour créer une instance similaire.|Yes|No              
Singleton       |Garantissez une seule instance pour une classe.|Yes|Yes             

Une fois dessiné, il ressemble à ↓:

Nom du motif Aperçu GoF Code Complete[1]
Abstract Factory Il fournit un moyen de générer de manière appropriée un ensemble d'instances associées en fonction de la situation. Yes Yes
Builder Masquez le processus de création d'une instance complexe. Yes No
Factory Method Fournit une méthode de création d'une instance qui ne dépend pas de l'instance réellement créée. Yes Yes
Prototype Dupliquez l'instance de prototype pour créer une instance similaire. Yes No
Singleton Garantissez une seule instance pour une classe. Yes Yes

SimpleSQLite Bibliothèque Wrapper pour le module sqlite3 de Python intégré. Pour simplifier la création de bases de données SQLite. Pour plus de détails → Création d'une bibliothèque Python SimpleSQLite qui simplifie la création de table SQLite / insertion de données

DateTimeRange Une bibliothèque pour traiter les plages horaires. Disponible pendant les heures d'été. Pour plus de détails → Création de la bibliothèque Python DateTimeRange qui gère la plage horaire

DataProperty Une bibliothèque pour extraire les informations d'attribut telles que les informations de type et la longueur sous forme de chaîne de caractères. Il peut s'agir d'une seule donnée ou d'un tableau de données. Les informations pour chaque colonne peuvent également être extraites de la matrice de données.

Exemple d'extraction d'informations d'attribut à partir d'une seule donnée


>>> from dataproperty import DataProperty
>>> DataProperty(-1.1)
data=-1.1, typename=FLOAT, align=right, str_len=4, ascii_char_width=4, integer_digits=1, decimal_places=1, additional_format_len=1

Exemple d'extraction des informations d'attribut de chaque colonne de la matrice de données


import sys
import datetime
from dataproperty import DataPropertyExtractor, Typecode

def display_col_dp(dp_list, attr_name):
    """show a value assocciated with an attribute for each
    DataProperty instance in the dp_list"""

    print()
    print("---------- {:s} ----------".format(attr_name))
    print([getattr(dp, attr_name) for dp in dp_list])

def main():
    # sample data definitions
    dt = datetime.datetime(2017, 1, 1, 0, 0, 0)
    inf = float("inf")
    nan = float("nan")
    data_matrix = [
        [1, 1.1,  "aa",   1,   1,     True,   inf,   nan,   dt],
        [2, 2.2,  "bbb",  2.2, 2.2,   False,  "inf", "nan", dt],
        [3, 3.33, "cccc", -3,  "ccc", "true", inf,
            "NAN", "2017-01-01T01:23:45+0900"],
    ]

    # extract property for each column from a matrix
    dp_extractor = DataPropertyExtractor()
    dp_extractor.header_list = [
        "int", "float", "str", "num", "mix", "bool", "inf", "nan", "time"]
    dp_extractor.data_matrix = data_matrix
    col_dp_list = dp_extractor.to_col_dataproperty_list()

    print("---------- typename ----------")
    print([Typecode.get_typename(dp.typecode) for dp in col_dp_list])

    display_col_dp(col_dp_list, "align")
    display_col_dp(col_dp_list, "ascii_char_width")
    display_col_dp(col_dp_list, "decimal_places")

if __name__ == "__main__":
    sys.exit(main())

output


---------- typename ----------
['INTEGER', 'FLOAT', 'STRING', 'FLOAT', 'STRING', 'BOOL', 'INFINITY', 'NAN', 'STRING']

---------- align ----------
[right, right, left, right, left, left, left, left, left]

---------- ascii_char_width ----------
[3, 5, 4, 4, 3, 5, 8, 3, 24]

---------- decimal_places ----------
[0, 2, nan, 1, 1, nan, nan, nan, nan]

pingparsing ping Une bibliothèque pour analyser les résultats de l'exécution des commandes. Vous pouvez également exécuter ping.

input


>ping google.com -n 10 > ping_win.txt

>type ping_win.txt

Pinging google.com [216.58.196.238] with 32 bytes of data:
Reply from 216.58.196.238: bytes=32 time=87ms TTL=51
Reply from 216.58.196.238: bytes=32 time=97ms TTL=51
Reply from 216.58.196.238: bytes=32 time=56ms TTL=51
Reply from 216.58.196.238: bytes=32 time=95ms TTL=51
Reply from 216.58.196.238: bytes=32 time=194ms TTL=51
Reply from 216.58.196.238: bytes=32 time=98ms TTL=51
Reply from 216.58.196.238: bytes=32 time=93ms TTL=51
Reply from 216.58.196.238: bytes=32 time=96ms TTL=51
Reply from 216.58.196.238: bytes=32 time=96ms TTL=51
Reply from 216.58.196.238: bytes=32 time=165ms TTL=51

Ping statistics for 216.58.196.238:
    Packets: Sent = 10, Received = 10, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 56ms, Maximum = 194ms, Average = 107ms

Analysez le résultat de l'exécution de ping comme ↑. Le résultat de l'exécution de Sample utilisant la bibliothèque est ↓

output


parse_sample.py -f ping_win.txt
# properties ---
packet_transmit: 10
packet_receive: 10
packet_loss: 0.0
rtt_min: 56.0
rtt_avg: 107.0
rtt_max: 194.0
rtt_mdev: None

# asdict ---
{
    "packet_loss": 0.0,
    "packet_transmit": 10,
    "rtt_min": 56.0,
    "rtt_avg": 107.0,
    "packet_receive": 10,
    "rtt_max": 194.0,
    "rtt_mdev": null
}

pathvalidate Une bibliothèque qui valide les chaînes de caractères telles que les noms de fichiers et remplace les caractères non valides.

Windows/Exemple de remplacement par une chaîne de caractères valide comme nom de fichier sur les deux Linux


import pathvalidate

filename = "_a*b:c<d>e%f/(g)h+i_0.txt"
print(pathvalidate.sanitize_filename(filename))
_abcde%f(g)h+i_0.txt

mbstrdecoder Une bibliothèque qui rend les chaînes Unicode. Cela a réduit la gêne d'Unicode.

from mbstrdecoder import MultiByteStrDecoder

encoded_multibyte_text = u"Caractère multi-octets".encode("utf-8")

#Les chaînes codées et Unicode peuvent être utilisées.
decoder = MultiByteStrDecoder(encoded_multibyte_text)

print(encoded_multibyte_text)
print(decoder.unicode_str)
print(decoder.codec)

output


b'\xe3\x83\x9e\xe3\x83\xab\xe3\x83\x81\xe3\x83\x90\xe3\x82\xa4\xe3\x83\x88\xe6\x96\x87\xe5\xad\x97'
Caractère multi-octets
utf_8

pytablereader Une bibliothèque pour extraire les données de table à partir du texte / des fichiers de CSV / ʻExcel / HTML/JSON / LTSV/Markdown / TSV`.

sqliteschema Une bibliothèque pour obtenir le schéma des fichiers de base de données SQLite.

sqliteschema-example


import sys
import simplesqlite
import sqliteschema

def make_database():
    db_path = "example.sqlite"
    con = simplesqlite.SimpleSQLite(db_path, "w")

    con.create_table_from_data_matrix(
        table_name="sampletable0",
        attr_name_list=["attr_a", "attr_b"],
        data_matrix=[[1, 2], [3, 4]])

    con.create_table_from_data_matrix(
        table_name="sampletable1",
        attr_name_list=["foo", "bar", "hoge"],
        data_matrix=[
            [1, 2.2, "aa"],
            [3, 4.4, "bb"],
        ],
        index_attr_list=("foo", "hoge"))

    con.create_table(
        "constraints",
        [
            "primarykey_id INTEGER PRIMARY KEY",
            "notnull_value REAL NOT NULL",
            "unique_value INTEGER UNIQUE",
        ]
    )

    return db_path

def main():
    db_path = make_database()
    extractor = sqliteschema.SqliteSchemaExtractor(db_path)
    print(extractor.dumps())

    return 0

if __name__ == "__main__":
    sys.exit(main())

output


.. table:: sampletable0

    +--------------+---------+-----------+--------+------+-----+
    |Attribute name|Data type|Primary key|Not NULL|Unique|Index|
    +==============+=========+===========+========+======+=====+
    |attr_a        |INTEGER  |           |        |      |     |
    +--------------+---------+-----------+--------+------+-----+
    |attr_b        |INTEGER  |           |        |      |     |
    +--------------+---------+-----------+--------+------+-----+

.. table:: sampletable1

    +--------------+---------+-----------+--------+------+-----+
    |Attribute name|Data type|Primary key|Not NULL|Unique|Index|
    +==============+=========+===========+========+======+=====+
    |foo           |INTEGER  |           |        |      |X    |
    +--------------+---------+-----------+--------+------+-----+
    |bar           |REAL     |           |        |      |     |
    +--------------+---------+-----------+--------+------+-----+
    |hoge          |TEXT     |           |        |      |X    |
    +--------------+---------+-----------+--------+------+-----+

.. table:: constraints

    +--------------+---------+-----------+--------+------+-----+
    |Attribute name|Data type|Primary key|Not NULL|Unique|Index|
    +==============+=========+===========+========+======+=====+
    |primarykey_id |INTEGER  |X          |        |      |     |
    +--------------+---------+-----------+--------+------+-----+
    |notnull_value |REAL     |           |X       |      |     |
    +--------------+---------+-----------+--------+------+-----+
    |unique_value  |INTEGER  |           |        |X     |     |
    +--------------+---------+-----------+--------+------+-----+

subprocrunner Une bibliothèque de wrapper pour le module subprocess.

subprocrunner-example


from subprocrunner import SubprocessRunner

runner = SubprocessRunner("echo test")
print("return code: {:d}".format(runner.run()))
print("stdout: {}".format(runner.stdout))

output


return code: 0
stdout: test

Recommended Posts

Résumé des outils et bibliothèques OSS créés en 2016
Résumé des modules et des classes dans Python-TensorFlow2-
Résumé des outils utilisés dans la ligne de commande vol.8
Résumé des outils utilisés dans la ligne de commande vol.5
Résumé des outils nécessaires pour analyser les données en Python
Récapitulatif du traitement de la date en Python (datetime et dateutil)
Résumé des différentes opérations dans Tensorflow
Résumé des index et des tranches Python
[201911 ~ 201912] Programmes et outils divers récemment créés, etc.
Résumé des méthodes fréquemment utilisées chez les pandas
Résumé des commandes fréquemment utilisées dans matplotlib
Résumé de diverses instructions for en Python
Résumé des pierres d'achoppement lors de l'installation de CaboCha
Captures d'écran de la pêche sur le Web avec du sélénium et Chrome.
Séparation de la conception et des données dans matplotlib
Résumé des distributions de probabilité qui apparaissent souvent dans les statistiques et l'analyse des données
Résumé des méthodes intégrées, etc. de la liste Python
Projet Euler # 1 "Multiple de 3 et 5" en Python
Résumé de la correspondance entre les opérations de tableau ruby et python
Résumé des différences entre PHP et Python
Résumé de la façon d'importer des fichiers dans Python 3
Résumé de ce qui a été utilisé dans 100 coups de Pandas (# 1 ~ # 32)
Un mémo créé dans un package et enregistré dans PyPI
Résumé de l'utilisation de MNIST avec Python
Installation de Python 3 et Flask [Résumé de la construction de l'environnement]
L'en-tête est mal aligné avec read_csv () et read_table () de Pandas
Résumé des fonctions d'évaluation utilisées dans l'apprentissage automatique
Coexistence d'Anaconda 2 et Anaconda 3 dans Jupyter + Bonus (Julia)
Résumé relatif aux E / S de python et fortran
Explication de la distance d'édition et de l'implémentation en Python
Résumé du traitement pickle et unpickle des classes définies par l'utilisateur
Résumé des opérations Excel utilisant OpenPyXL en Python
OSS et animaux
[Introduction à Python] Résumé des fonctions et méthodes qui apparaissent fréquemment en Python [Format du problème]
Traitement pleine largeur et demi-largeur des données CSV en Python
À propos de l'erreur d'importation de numpy et scipy dans anaconda
Calcul de l'écart type et du coefficient de corrélation en Python
Résumé des commandes Linux (UNIX) fournies avec Progate
Liste des bibliothèques Python pour les data scientists et les data ingénieurs
Python - Explication et résumé de l'utilisation des 24 meilleurs packages
[Python] Erreur de type: résumé des causes et des solutions pour "Aucun type"
Différence entre Ruby et Python en termes de variables
Récapitulatif des outils d'exploitation de l'interface graphique Windows avec Python
Une comparaison rapide des bibliothèques de test Python et node.js
[python] Calcul des mois et des années de différence de date / heure
Exemple d'obtention du nom du module et du nom de la classe en Python
Explication des outils et commandes de package pour le système d'exploitation Linux