[PYTHON] Zusammenfassung der 2016 erstellten OSS-Tools und -Bibliotheken

Übersicht und Beispiele der folgenden OSSs, die 2016 erstellt wurden

--CLI-Tool x 2

CLI-Tool

sqlitebiter Ein Tool zum Konvertieren von "CSV" / "Excel" / "HTML" / "JSON" / "LTSV" / "Markdown" / "TSV" / "Google Sheets" in "SQLite" -Datenbankdateien. Sie können auch von der angegebenen URL konvertieren.

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 Ein Wrapper-Tool für den Netzwerkbandbreitensteuerungsbefehl "tc". Ich habe es geschafft, weil ich das Einstellungsformat von tc sofort vergessen habe. Die folgenden drei Arten von Befehlen sind enthalten.

-- tcset: tc Filtereinstellung -- tcdel: tc Filter entfernt -- tcshow: Zeigt die aktuellen tc-Einstellungen an

tcset kann sowohl eingehende als auch ausgehende Pakete filtern.

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"
            }
        }
    }
}

Python-Bibliothek

pytablewriter Eine Bibliothek zum Schreiben von Tabellen. Unterstützt Multi-Byte-Zeichen.

Unterstützte Formate: "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"Generationsmuster".encode("utf_8")
writer.header_list = [u"Mustername".encode("utf_8"), "Überblick", "GoF", "Code Complete[1]"]
writer.value_matrix = [
    ["Abstract Factory", u"Es bietet eine Möglichkeit, je nach Situation eine Reihe verwandter Instanzen entsprechend zu generieren.".encode("utf_8"), "Yes", "Yes"],
    ["Builder", "Blenden Sie den Prozess zum Erstellen einer komplexen Instanz aus.", "Yes", "No"],
    ["Factory Method", "Bietet eine Methode zum Erstellen einer Instanz, die nicht von der tatsächlich erstellten Instanz abhängt.", "Yes", "Yes"],
    ["Prototype", "Duplizieren Sie die Prototypinstanz, um eine ähnliche Instanz zu erstellen.", "Yes", "No"],
    ["Singleton", "Garantieren Sie eine einzelne Instanz für eine Klasse.", "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


#Generationsmuster
Mustername|Überblick|GoF|Code Complete[1]
----------------|----------------------------------------------------------------------------|---|----------------
Abstract Factory|Es bietet eine Möglichkeit, je nach Situation eine Reihe verwandter Instanzen entsprechend zu generieren.|Yes|Yes             
Builder         |Blenden Sie den Prozess zum Erstellen einer komplexen Instanz aus.|Yes|No              
Factory Method  |Bietet eine Methode zum Erstellen einer Instanz, die nicht von der tatsächlich erstellten Instanz abhängt.|Yes|Yes             
Prototype       |Duplizieren Sie die Prototypinstanz, um eine ähnliche Instanz zu erstellen.|Yes|No              
Singleton       |Garantieren Sie eine einzelne Instanz für eine Klasse.|Yes|Yes             

Beim Zeichnen sieht es aus wie ↓:

Mustername Überblick GoF Code Complete[1]
Abstract Factory Es bietet eine Möglichkeit, je nach Situation eine Reihe verwandter Instanzen entsprechend zu generieren. Yes Yes
Builder Blenden Sie den Prozess zum Erstellen einer komplexen Instanz aus. Yes No
Factory Method Bietet eine Methode zum Erstellen einer Instanz, die nicht von der tatsächlich erstellten Instanz abhängt. Yes Yes
Prototype Duplizieren Sie die Prototypinstanz, um eine ähnliche Instanz zu erstellen. Yes No
Singleton Garantieren Sie eine einzelne Instanz für eine Klasse. Yes Yes

SimpleSQLite Wrapper-Bibliothek für das integrierte Modul "sqlite3" von Python. Vereinfachung der Erstellung von SQLite-Datenbanken. Weitere Informationen → Erstellt eine Python-Bibliothek SimpleSQLite, die das Erstellen / Einfügen von SQLite-Tabellen vereinfacht

DateTimeRange Eine Bibliothek zum Umgang mit Zeitbereichen. Verfügbar während der Sommerstunden. Weitere Informationen → Python-Bibliothek DateTimeRange für den Zeitbereich erstellt

DataProperty Eine Bibliothek zum Extrahieren von Attributinformationen wie Typinformationen und Länge als Zeichenfolge. Es kann sich um einzelne Daten oder ein Datenarray handeln. Informationen für jede Spalte können auch aus der Datenmatrix extrahiert werden.

Beispiel für das Extrahieren von Attributinformationen aus einzelnen Daten


>>> 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

Beispiel für das Extrahieren der Attributinformationen jeder Spalte aus der Datenmatrix


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 Eine Bibliothek zum Parsen der Ergebnisse der Befehlsausführung. Sie können auch ping ausführen.

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

Analysieren Sie das Ausführungsergebnis von ping wie ↑. Das Ausführungsergebnis von Sample unter Verwendung der Bibliothek ist ↓

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 Eine Bibliothek, die Zeichenfolgen wie Dateinamen überprüft und ungültige Zeichen ersetzt.

Windows/Beispiel für das Ersetzen durch eine gültige Zeichenfolge als Dateinamen unter 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 Eine Bibliothek, die Zeichenfolgen zu Unicode macht. Dies hat den Ärger von Unicode verringert.

from mbstrdecoder import MultiByteStrDecoder

encoded_multibyte_text = u"Multibyte-Zeichen".encode("utf-8")

#Es können sowohl codierte als auch Unicode-Zeichenfolgen verwendet werden.
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'
Multibyte-Zeichen
utf_8

pytablereader Eine Bibliothek zum Extrahieren von Tabellendaten aus dem Text / der Datei von "CSV" / "Excel" / "HTML" / "JSON" / "LTSV" / "Markdown" / "TSV".

sqliteschema Eine Bibliothek zum Abrufen des Schemas von SQLite-Datenbankdateien.

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 Eine Wrapper-Bibliothek für das Subprozess-Modul.

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

Zusammenfassung der 2016 erstellten OSS-Tools und -Bibliotheken
Zusammenfassung der Module und Klassen in Python-TensorFlow2-
Zusammenfassung der in Command Line Vol.8 verwendeten Tools
Zusammenfassung der in Command Line Vol.5 verwendeten Tools
Zusammenfassung der Tools, die zum Analysieren von Daten in Python benötigt werden
Zusammenfassung der Datumsverarbeitung in Python (Datum / Uhrzeit und Datum)
Zusammenfassung verschiedener Operationen in Tensorflow
Zusammenfassung der Python-Indizes und -Slices
[201911 ~ 201912] Kürzlich erstellte verschiedene Programme und Tools usw.
Zusammenfassung der häufig verwendeten Methoden bei Pandas
Zusammenfassung der häufig verwendeten Befehle in matplotlib
Zusammenfassung verschiedener for-Anweisungen in Python
Zusammenfassung der Stolpersteine bei der Installation von CaboCha
Screenshots des Webfischens mit Selen und Chrom.
Trennung von Design und Daten in matplotlib
Zusammenfassung der Wahrscheinlichkeitsverteilungen, die häufig in Statistiken und Datenanalysen vorkommen
Zusammenfassung der integrierten Methoden usw. der Python-Liste
Projekt Euler # 1 "Vielfaches von 3 und 5" in Python
Zusammenfassung der Korrespondenz zwischen Ruby- und Python-Array-Operationen
Zusammenfassung der Unterschiede zwischen PHP und Python
Zusammenfassung zum Importieren von Dateien in Python 3
Zusammenfassung dessen, was bei 100 Pandas-Schlägen verwendet wurde (# 1 ~ # 32)
Ein Memo, das in einem Paket erstellt und in PyPI registriert wurde
Zusammenfassung der Verwendung von MNIST mit Python
Installation von Python 3 und Flask [Zusammenfassung der Umgebungskonstruktion]
Der Header ist falsch ausgerichtet mit read_csv () und read_table () von Pandas
Zusammenfassung der beim maschinellen Lernen verwendeten Bewertungsfunktionen
Koexistenz von Anaconda 2 und Anaconda 3 in Jupyter + Bonus (Julia)
E / A-bezogene Zusammenfassung von Python und Fortan
Erläuterung der Bearbeitungsentfernung und Implementierung in Python
Zusammenfassung der Pickle- und Unpickle-Verarbeitung von benutzerdefinierten Klassen
Zusammenfassung der Excel-Operationen mit OpenPyXL in Python
OSS und Tiere
[Einführung in Python] Zusammenfassung der Funktionen und Methoden, die häufig in Python vorkommen [Problemformat]
Verarbeitung von CSV-Daten in voller und halber Breite in Python
Über Importfehler von numpy und scipy in anaconda
Berechnung der Standardabweichung und des Korrelationskoeffizienten in Python
Zusammenfassung der Linux (UNIX) -Befehle, die mit Progate ausgegeben wurden
Liste der Python-Bibliotheken für Datenwissenschaftler und Dateningenieure
Python - Erläuterung und Zusammenfassung der Verwendung der 24 wichtigsten Pakete
[Python] Typfehler: Zusammenfassung der Ursachen und Abhilfemaßnahmen für 'Kein Typ'
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Zusammenfassung der Tools zum Betreiben der Windows-Benutzeroberfläche mit Python
Ein schneller Vergleich der Testbibliotheken von Python und node.js.
[Python] Berechnung der Differenz von Datum und Zeit in Monaten und Jahren
Beispiel für das Abrufen des Modulnamens und des Klassennamens in Python