Portál AbcLinuxu, 1. května 2025 08:45
Univerzální konvertor dat
1.4.2018 19:42
| Přečteno: 1570×
| Linux
| poslední úprava: 1.4.2018 19:42
V rámci opáčka Pythonu jsem se podíval, co bych tak mohl naprogramovat a zjistil jsem, že jsem nenašel univerzální aplikaci na konverzi dat. Tak jsem jednu takovou napsal.
Je s podivem, že na tak častou činnost jako je konverze dat, jsem nenašel žádnou aplikaci, která by se lehce přizpůsobila pro jakákoliv data. Je s větším podivem, že je to tak jednoduché. Ukáži vám tedy vlastní implementaci. Zdrojové soubory přiložím v prvním komentáři (pokud mě někdo nepředběhne), v textu se zaměřím jen na ty nejzásadnější věci.
Aplikace se skládá ze dvou částí: První částí je hlavní program, který se stará a parsování příkazového řádku, načtení pluginů, spuštění pluginů a předání data. Druhou částí jsou zmiňované pluginy. Ty se starají o vlastní datové konverze.
Hlavní program
Jak bylo řečeno, hlavní program se stará o "administrativní část". Zběžně kontroluje, zda soubor s pluginem se podaří naimportovat. Dále podle požadavku uživatele vypíše seznam všech pluginů, případně podrobnou nápovědu.
Pluginy se pak postarají o vlastní práci. Máme 2 druhy pluginů.: Vstupní pluginy se starají o načtení dat a výstupní pluginy se starají a uložení. Jeden z nich pak provede i konverzi dat, ale to je na autrovi pluginu.
Soubor s pluginy musí dodržet jisté konvence. Hlavní program je zběžně zkontroluje a případně je spustí a předá jim data.
Vstupní plugin
Jednoduchý vstupní plugin vypadá třeba takto:
#!/usr/bin/env python3
import pickle
description="Unpickle data"
kind="Input"
class Plugin:
def __init__(self, settings = None):
self.settings = settings
def Help(self):
return """Unpickle data.
Settings:
path - (required) path to file where read data."""
def Run(self):
with open(self.settings['path'], "rb") as fh:
data = pickle.load(fh)
return data
Povinné položky jsou:
- textové proměnná 'kind', která obsahuje příznak, že jde o vstupní nebo výstupní plugin (Input nebo Output)
- textová proměnná 'description', která pobsahuje popis pluginu.
- třída 'Plugin'. Název je vždy stejný, rozlišuje se názvem modulu.
- Konstruktor třídy Plugin má nepovinný parametr settings, kam hlavní program pošle dictionary s nastavením, která uživatel napsal na příkazový řádek
- metoda 'Help' třídy Plugin vrátí podrobnou nápovědu k pluginu
- metoda 'Run' třídy Plugin je bez parametrů a vrací objekt, který se předá výstupnímu pluginu
Výstupní plugin
Jednoduchý výstupní plugin vypadá třeba takto:
#!/usr/bin/env python3
import pickle
description="Pickle data"
kind="Output"
class Plugin:
def __init__(self, settings = None):
self.settings = settings
def Help(self):
return """Pickle data.
Settings:
path - (required) path to file where to store data."""
def Run(self, data):
with open(self.settings['path'], "wb") as fh:
pickle.dump(data, fh)
Od vstupního pluginu se liší jen v několika detailech
- metoda 'Run' třídy Plugin má jako vstupní parametr data k zaápisu (a přípdně konverzi) a nevrací nic
Výhody
Výhody řešení jsou nasnadě:
- Autor pluginu se nestará o nudné věci jako parsování parametrů z příkazové řádky.
- Lze oddělit práci čtení a zápis dat, můžou vzniknout knihovny na obojí a uživatel si pak přepíná různé pluginy podle potřeby.
- Dá se s tím užít trochu srandy
Licence, diskuse a závěr
Používejte toto dílo jako Public Domain. Vůbec si s tím dělejte, co chcete.
Program se dá asi vylepšit, ale nemám zase tolik času. Obzvlášť když teď začne být hezky.
Do diskuse si piště co chcete. Nesuďte mě příliš ostře, ten program snad opravdu funguje (testoval jsem).
Tiskni
Sdílej:
Komentáře
Vložit další komentář
1.4.2018 19:44
Tomáš | skóre: 31
| blog:
Tomik
Zdoják
1.4.2018 20:10
xkucf03 | skóre: 49
| blog:
xkucf03
Re: Univerzální konvertor dat
Založit nové vlákno •
Nahoru
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.