Présentation et exemples des OSS suivants créés en 2016, respectivement
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"
}
}
}
}
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