Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: oTa 23. 07. 2015, 09:57:06

Název: Python 3.4 - jak uchovat nastavení
Přispěvatel: oTa 23. 07. 2015, 09:57:06
Ahoj pánové, chtěl bych se zeptat, jak můžu uchovat nějaké nastavení po ukončení programu pro příští spuštění. Mám třídu a v ní mám 3 proměnné, které potřebuji uchovat.
Kód: [Vybrat]
self.rgb = 1
self.bck = 1
self.txt = 45
Neporadil by mi prosím někdo ? Děkuji za pomoc.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: mhepp 23. 07. 2015, 10:29:06
Co třeba použít JSON -- knihovny jsou připravené a budeš mít validaci vstupu v ceně
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: karel 23. 07. 2015, 11:26:35
pickle
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: frk 23. 07. 2015, 17:49:11
shelve
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: uetoyo 23. 07. 2015, 18:37:49
Ahoj, prostuduj toto: https://docs.python.org/3/library/pickle.html
to je to, co psal @karel (tzv. serializace)
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Bystroushaak 25. 07. 2015, 15:52:46
Nemá smysl používat pickle, když shelve je nástavba nad ním vymyšlená přesně pro tyhle případy. Viz http://www.py.cz/Shelve
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Bystroushaak 25. 07. 2015, 15:53:42
Případně pokud bys chtěl něco vhodného pro více threadů a komerční nasazení, tak http://www.zodb.org/
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: mikrom 25. 07. 2015, 22:33:15
Ja pouzivam ConfigParser (sucast standard library) a uchovavam nastavenia v INI-suboroch, ktore su normalne citatelne.
Tak napriklad:
config.py
Kód: [Vybrat]
from ConfigParser import ConfigParser

def write_config():
  cfgf = open('c:\work\config.ini','w')
  # config for Class01
  cp.add_section('MyClass01_config')
  cp.set('MyClass01_config','rgb',1)
  cp.set('MyClass01_config','bck',10)
  cp.set('MyClass01_config','txt',45)
  # config for Class02
  cp.add_section('MyClass02_config')
  cp.set('MyClass02_config','foo','spam')
  cp.set('MyClass02_config','bar','eggs')
  cp.write(cfgf)
  cfgf.close()

def print_config():
  cp.read('c:\work\config.ini')
  print "Configuration: "
  print "---------------"
  for section in cp.sections():
    print "[%s]" % section
    for option in cp.options(section):
      print "%s = %s" % (option, cp.get(section, option))

if __name__=="__main__":
  cp = ConfigParser()
  write_config()
  print_config()

Po spusteni
Kód: [Vybrat]
C:\Work>python config.py
vytvori subor config.ini a vypise jeho obsah:
Kód: [Vybrat]
Configuration:
---------------
[MyClass01_config]
rgb = 1
bck = 10
txt = 45
[MyClass02_config]
foo = spam
bar = eggs

Poznamka: Na Python 3.x som sice este nepresiel, ale ConfigParser je v standardnej verzii aj tam - pozri:
https://docs.python.org/3/library/configparser.html
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Bystroushaak 26. 07. 2015, 03:02:20
Ja pouzivam ConfigParser (sucast standard library) a uchovavam nastavenia v INI-suboroch, ktore su normalne citatelne.

To není to samé. Shelve / ZODB uchovává celé objekty bez toho, aniž by ses musel starat o serializaci/deserializaci. Pokud to chceš jen používat na pozastavení stavu programu, abys ho při příštím spuštění měl přesně ve stavu, v jakém jsi ho opustil, tak je shelve/ZODB ideální, protože samo serializuje objekty.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: mikrom 26. 07. 2015, 08:25:33
Je mi to jasne.

Mne sa podla dotazu zda, ze OP potrebuje globalne nastavenia programu.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Inkvizitor 26. 07. 2015, 09:24:17
Je mi to jasne.
  • ak chce OP ukladat zlozite datove struktury:
    • ak to nepotrebuje mat v ludsky-citatelnej forme moze pouzit pickle, shelve, ....
    • ak to chce mat v ludsky-citatelnej forme moze pouzit YAML, JSON
  • ak chce OP ukladat globalne nastavenia programu, tak je idealny ConfigParser a INI-subor v ludsky-citatelnej forme

Mne sa podla dotazu zda, ze OP potrebuje globalne nastavenia programu.

Podle mě má INI význam tenkrát, pokud chceme mít data nejenom v lidsky čitelné podobě, ale chceme umožnit i editaci. YAML je exot (nic proti), JSON je super v tom, že je přenositelný i mimo Python a dá se validovat  (JSON Schema), dá se v případě potřeby číst i editovat ručně, ale není to až tak moc komfortní, spíše nouzovka. Shelve jsem nikdy nepoužil a nemám k tomu moc motivaci, pickle je pohodlné, pokud se používá jenom z Pythonu. Problém nastává tenkrát, když se změní třeba název třídy, která tam byla původně uložená. Pak se ušetřená práce vrátí zpět jako bumerang.

Obecně - pokud je to jenom trochu možné, použiju JSON. Od 2.6 je v Pythonu podpora standardně, nejsem vázaný na Python (už se mi stalo, že jsem potřeboval zpracovávat mezivýstupy v jiném jazyce - konkrétně ve Scale a stejně jsem je konvertoval z pickle do JSONu). Serializaci složitějších objektů (na což se pickle nebo ZODB samozřejmě docela hodí) se snažím vyhýbat, podle mě to ve většině případů není moc dobrý nápad.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: mikrom 26. 07. 2015, 15:41:35
...YAML je exot (nic proti)...
YAML som pouzil par krat v Ruby (ktory ma v standardnej kniznici YAML aj JSON).
Myslel som teda, ze Python ma YAML tiez v standardej kniznici, ale neni tomu tak. 
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: lck 26. 07. 2015, 15:44:22
ZODB je overene casom a vyborne zdokumentovane. Ak potrebujete transparentne ulkladanie stavu objektov v pythone je to najlepsia volba. Je tu moznost pouzit napr. aj postgres ako backend pre ZODB :) + ZODB je ACIC databaza teda ma aj transakcie, ale aj vela inych features
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Bystroushaak 26. 07. 2015, 18:03:56
Shelve jsem nikdy nepoužil a nemám k tomu moc motivaci, pickle je pohodlné, pokud se používá jenom z Pythonu.

Shelve je jen syntax suggar na pickle.

ZODB je overene casom a vyborne zdokumentovane

Ověřené časem ano, ale ta dokumentace docela pokulhává. Ne že by nebyla, ale je roztříštěná a ve spojení se ZEO clusterem je tam pár věcí, které umí překvapit.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Inkvizitor 26. 07. 2015, 19:26:25
...YAML je exot (nic proti)...
YAML som pouzil par krat v Ruby (ktory ma v standardnej kniznici YAML aj JSON).
Myslel som teda, ze Python ma YAML tiez v standardej kniznici, ale neni tomu tak.

O to mi nešlo. Ten formát zná poměrně málo lidí a podle mě je méně intuitivní než třeba INI.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: lck 26. 07. 2015, 21:01:43
Shelve jsem nikdy nepoužil a nemám k tomu moc motivaci, pickle je pohodlné, pokud se používá jenom z Pythonu.

Shelve je jen syntax suggar na pickle.

ZODB je overene casom a vyborne zdokumentovane

Ověřené časem ano, ale ta dokumentace docela pokulhává. Ne že by nebyla, ale je roztříštěná a ve spojení se ZEO clusterem je tam pár věcí, které umí překvapit.

namiesto ZEO je uz dnes lepsie pouzit RelStorage backend (postgresql/mysql/oracle) ktorym zaroven vyriesite aj backup/restore
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: mikrom 26. 07. 2015, 21:32:23
...YAML je exot (nic proti)...
YAML som pouzil par krat v Ruby (ktory ma v standardnej kniznici YAML aj JSON).
Myslel som teda, ze Python ma YAML tiez v standardej kniznici, ale neni tomu tak.

O to mi nešlo. Ten formát zná poměrně málo lidí a podle mě je méně intuitivní než třeba INI.
Podla mna lepsie pasuje k filozofii Pythonu ako JSON. Netreba {...}, ale treba odsadzovat tak ako v Pythone.
YAML bol navrhnuty ako ludsky-citatelny format. Je ale pravda ze JSON sa pouziva viac.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: mikrom 26. 07. 2015, 21:43:25
Shelve jsem nikdy nepoužil a nemám k tomu moc motivaci, pickle je pohodlné, pokud se používá jenom z Pythonu.

Shelve je jen syntax suggar na pickle.
Shelve som nepoznal, tak som ho teraz vyskusal, ale moc ma nenadchol.
Zatial co Pickle pri ulozeni vytvori iba jeden subor, Shelve mi vytvoril az tri subory:
*.dir, *.txt, *bak (t.j. kopia *.dir)
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Bystroushaak 26. 07. 2015, 23:08:04
namiesto ZEO je uz dnes lepsie pouzit RelStorage backend (postgresql/mysql/oracle) ktorym zaroven vyriesite aj backup/restore

Jak to spolu souvisí? ZEO je server nad ZODB, který se stará o přístup z vícero procesů, cacheování a tak. RelStorage backend je jen způsob uložení dat. Nebo to chápu špatně?
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: lck 26. 07. 2015, 23:47:01
namiesto ZEO je uz dnes lepsie pouzit RelStorage backend (postgresql/mysql/oracle) ktorym zaroven vyriesite aj backup/restore

Jak to spolu souvisí? ZEO je server nad ZODB, který se stará o přístup z vícero procesů, cacheování a tak. RelStorage backend je jen způsob uložení dat. Nebo to chápu špatně?

ano chapete to spatne ;-) RelStorage bol vytvoreny ako plna nahrada za ZEO - teda riesi aj pristup viacerych klientov/procesov k ZODB
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: karel 27. 07. 2015, 10:41:54
Divní trolové,
tazatel se ptal v čem si má uchovat pár hodnot oběktu pro znovuspuštění, dokonce uvádí že si potřebuje uchovat tři proměné, a vy na něj jdete s databází ? Proboha proberte se a začněte přemýšlet než něco kváknete. Já jen doufám, že podobně neřešíte i vaše pracovní zadání. Já bych vás hnal, pokud by jste mi dotáhly kód kde místo využití základních knihoven na jednoduchý program/script budete mít půl A4 popsanou dependencies jen, že potřebujete uchovat pár bajtů kvuli znovu spuštění.

Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Bystroushaak 27. 07. 2015, 17:32:45
Divní trolové,
tazatel se ptal v čem si má uchovat pár hodnot oběktu pro znovuspuštění, dokonce uvádí že si potřebuje uchovat tři proměné, a vy na něj jdete s databází ? Proboha proberte se a začněte přemýšlet než něco kváknete. Já jen doufám, že podobně neřešíte i vaše pracovní zadání. Já bych vás hnal, pokud by jste mi dotáhly kód kde místo využití základních knihoven na jednoduchý program/script budete mít půl A4 popsanou dependencies jen, že potřebujete uchovat pár bajtů kvuli znovu spuštění.

Amen, promluvil E-mudrc, co musí srát do ostatních. Zrovna shelve (http://www.py.cz/Shelve) je součástí standardní distribuce a dělá přesně to, co OP chtěl - uchovává stav objektu a kód pro jeho použití je asi tak na pět řádků. OP nemusí řešit serializaci a deserializaci, narozdíl od případu použití JSON/YAML/INI.

To že se tu bavíme o ZODB, která je vhodná pro projekty většího typu* můžeš ignorovat, když se ti to nelíbí. Fakt nechápu, kde se bere ta potřeba si hned otevírat na všechny kanál.

*Doslova jsem psal: Případně pokud bys chtěl něco vhodného pro více threadů a komerční nasazení, tak http://www.zodb.org/
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: rizi 27. 07. 2015, 17:45:29
Použij csv, zapisuje se do něj fakt rychle, dívej

Kód: [Vybrat]
hodnoty = [1,2,3,4]
f = file("soubor.csv", "w")
delka = len(hodnoty)
for x in range(delka):
    f.write(hodnoty[x] + "\n")

A je to
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: mikrom 27. 07. 2015, 20:30:25
Myslim, ze je zbytocne dohadovat sa o tom, ktory modul je lepsi  pre danu ulohu, ked OP nereaguje.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Bystroushaak 27. 07. 2015, 23:04:19
Tohle není soukromá poradna pro OPa, čte to podstatně víc lidí, kteří se z toho třeba i něco zajímavého dozví.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: evil 27. 07. 2015, 23:36:54
Když to OP už nečte, poradil bych mu eval.

uložení:
Kód: [Vybrat]
conf = {'x': 'foo'}
with open('config.dat', 'w') as f:
    f.write(repr(conf))

načtení:
Kód: [Vybrat]
conf = eval(open('config.dat').read())
hahahahahahahaHAHAHAAAA!!
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: karel 28. 07. 2015, 04:15:26
Tohle není soukromá poradna pro OPa, čte to podstatně víc lidí, kteří se z toho třeba i něco zajímavého dozví.

Nemohu plně souhlasit s myšlenkou,

tazatel něco neumí nebo něčemu nerozumí, vytvoří nové téma kde pokud někdo ví poradí. A tečka.
Sem tam se najde někdo kdo ho trolí, ale to už tak v naší společnosti je. No a pak se tam nabalí offtopic příspěvky. Ano to se stává, ale k tomu to primárně neslouží. Primární je zodpovědět a poradit co nejlepší cestu.

Databáze pro python by si zasloužily vlastní diskuzi, určitě ale nepatří jejich zmiňování do dotazu na uchování nastavení programu.

Tento příspěvek je také mimo mísu.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Snow 28. 07. 2015, 07:17:21
Použij csv, zapisuje se do něj fakt rychle, dívej

Kód: [Vybrat]
hodnoty = [1,2,3,4]
f = file("soubor.csv", "w")
delka = len(hodnoty)
for x in range(delka):
    f.write(hodnoty[x] + "\n")

A je to
Bože to je prasárna...



Já osobně používám YAML, (pokud soubor beru řekněme jako config) líbí se mě to odsazování a snadná úprava.
Pokud do souboru chci jen ukládat, číst a nechci ho editovat tak YAML (i když taky snadno lze editovat...) případně pickle tam kde by mohlo svádět soubor ručně editovat, což si nepřeji...
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Snow 28. 07. 2015, 07:19:35
Použij csv, zapisuje se do něj fakt rychle, dívej

Kód: [Vybrat]
hodnoty = [1,2,3,4]
f = file("soubor.csv", "w")
delka = len(hodnoty)
for x in range(delka):
    f.write(hodnoty[x] + "\n")

A je to
Bože to je prasárna...



Já osobně používám YAML, (pokud soubor beru řekněme jako config) líbí se mě to odsazování a snadná úprava.
Pokud do souboru chci jen ukládat, číst a nechci ho editovat tak JSON (i když taky snadno lze editovat...) případně pickle tam kde by mohlo svádět soubor ručně editovat, což si nepřeji... U obou je výhoda že je nemusíš doinstalovávat.
Oprava...
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: rizi 28. 07. 2015, 11:25:05
Použij csv, zapisuje se do něj fakt rychle, dívej

Kód: [Vybrat]
hodnoty = [1,2,3,4]
f = file("soubor.csv", "w")
delka = len(hodnoty)
for x in range(delka):
    f.write(hodnoty[x] + "\n")

A je to
Bože to je prasárna...


Co je na tom za prasárnu? Ve skole sem za to dostal jednicku a ten ucitel ma vysokou skolu, tak by mi ji asi nedal ne?
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Bystroushaak 28. 07. 2015, 12:53:55
Nemohu plně souhlasit s myšlenkou,

tazatel něco neumí nebo něčemu nerozumí, vytvoří nové téma kde pokud někdo ví poradí. A tečka.
Sem tam se najde někdo kdo ho trolí, ale to už tak v naší společnosti je. No a pak se tam nabalí offtopic příspěvky. Ano to se stává, ale k tomu to primárně neslouží.

Jak, a tečka? Tohle fórum se jmenuje Vývoj, ne "OPova osobní poradna".

Primární je zodpovědět a poradit co nejlepší cestu.
Databáze pro python by si zasloužily vlastní diskuzi, určitě ale nepatří jejich zmiňování do dotazu na uchování nastavení programu.

Tento příspěvek je také mimo mísu.

S tím prostě nemůžu souhlasit - primární by mělo být se něco dozvědět a vést diskuze (alespoň přibližně) k tématu. Což (objektové!) databáze určitě jsou, to pozná i OP, až mu ten program začne přerůstat přes hlavu.

Já jsem se například dozvěděl, že se dá použít RelStorage, což je pro mě důležitá informace, kterou bych jinak těžko získával. To že se tady z toho různí začátečníci snaží udělat jejich osobní helpdesk neznamená, že my všichni ostatní se jim musíme podřizovat.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Tomáš Crhonek 28. 07. 2015, 12:59:47
Použij csv, zapisuje se do něj fakt rychle, dívej

Kód: [Vybrat]
hodnoty = [1,2,3,4]
f = file("soubor.csv", "w")
delka = len(hodnoty)
for x in range(delka):
    f.write(hodnoty[x] + "\n")

A je to
Bože to je prasárna...


Co je na tom za prasárnu? Ve skole sem za to dostal jednicku a ten ucitel ma vysokou skolu, tak by mi ji asi nedal ne?

Možná jsem jen nepoznal trolla, ale jestli se za toto dneska dávají jedničky, tak je to se školstvím mnohem horší, než se obecně soudí. Nebyl to příklad pro: udělejte na minimálním počtu řádků maximum programátorských chyb?
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Tomáš Crhonek 28. 07. 2015, 13:03:26
Divní trolové,
tazatel se ptal v čem si má uchovat pár hodnot oběktu pro znovuspuštění, dokonce uvádí že si potřebuje uchovat tři proměné, a vy na něj jdete s databází ? Proboha proberte se a začněte přemýšlet než něco kváknete. Já jen doufám, že podobně neřešíte i vaše pracovní zadání. Já bych vás hnal, pokud by jste mi dotáhly kód kde místo využití základních knihoven na jednoduchý program/script budete mít půl A4 popsanou dependencies jen, že potřebujete uchovat pár bajtů kvuli znovu spuštění.

Doufám že víte, jak přesně toto potom dopadá v praxi. V praxi se také chce udělat jednu věc rychle a jednoduše (místo blablabla použít blabla). Jenže tohle trvá asi tak týden, potom přijde požadavek, kde je potřeba udělat něco co sice jde ale drhne to, a potom přijde požadavek, který už znamená to kompletně přepsat (přitom kdyby se na počátku šlo na problém "z větší šíře", tak se další požadavky implementují jedna radost. Každý velký program začínal tím, že "je potřeba uchovat tři proměnné". Je naopak dobré tazateli poradit další možnosti, jak se s takovou situací vypořádat.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: rizi 28. 07. 2015, 13:26:26
Použij csv, zapisuje se do něj fakt rychle, dívej

Kód: [Vybrat]
hodnoty = [1,2,3,4]
f = file("soubor.csv", "w")
delka = len(hodnoty)
for x in range(delka):
    f.write(hodnoty[x] + "\n")

A je to
Bože to je prasárna...


Co je na tom za prasárnu? Ve skole sem za to dostal jednicku a ten ucitel ma vysokou skolu, tak by mi ji asi nedal ne?

Možná jsem jen nepoznal trolla, ale jestli se za toto dneska dávají jedničky, tak je to se školstvím mnohem horší, než se obecně soudí. Nebyl to příklad pro: udělejte na minimálním počtu řádků maximum programátorských chyb?

Ale tam zadna chyba neni! Dyt to funguje dobre.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: frk 29. 07. 2015, 09:05:33
Použij csv, zapisuje se do něj fakt rychle, dívej

Kód: [Vybrat]
hodnoty = [1,2,3,4]
f = file("soubor.csv", "w")
delka = len(hodnoty)
for x in range(delka):
    f.write(hodnoty[x] + "\n")

A je to


Jo, jasně. A takhle nějak vy a ten váš učitel šifrujete, žejo?

Kód: [Vybrat]
text = "Tohle je tuze tajne"
klic = 3
delka = len(plaintext)
for i in range(delka):
    plaintext[i] = plaintext[i] + klic
print text
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: K> 29. 07. 2015, 10:21:26
Použij csv, zapisuje se do něj fakt rychle, dívej

Kód: [Vybrat]
hodnoty = [1,2,3,4]
f = file("soubor.csv", "w")
delka = len(hodnoty)
for x in range(delka):
    f.write(hodnoty[x] + "\n")

A je to
Bože to je prasárna...


Co je na tom za prasárnu? Ve skole sem za to dostal jednicku a ten ucitel ma vysokou skolu, tak by mi ji asi nedal ne?

Možná jsem jen nepoznal trolla, ale jestli se za toto dneska dávají jedničky, tak je to se školstvím mnohem horší, než se obecně soudí. Nebyl to příklad pro: udělejte na minimálním počtu řádků maximum programátorských chyb?

Kdybys radsi chytraku hned v prvnim prispevku napsal jak je to neprasacky. Nebo jen tak blbe kecas?
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: rizi 29. 07. 2015, 10:42:38
Použij csv, zapisuje se do něj fakt rychle, dívej

Kód: [Vybrat]
hodnoty = [1,2,3,4]
f = file("soubor.csv", "w")
delka = len(hodnoty)
for x in range(delka):
    f.write(hodnoty[x] + "\n")

A je to
Bože to je prasárna...


Co je na tom za prasárnu? Ve skole sem za to dostal jednicku a ten ucitel ma vysokou skolu, tak by mi ji asi nedal ne?

Možná jsem jen nepoznal trolla, ale jestli se za toto dneska dávají jedničky, tak je to se školstvím mnohem horší, než se obecně soudí. Nebyl to příklad pro: udělejte na minimálním počtu řádků maximum programátorských chyb?

Kdybys radsi chytraku hned v prvnim prispevku napsal jak je to neprasacky. Nebo jen tak blbe kecas?

Jen blbe keca, protoze na tom linuxu stejne programovat nejde. Neni pro nej visual studio.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Tomáš Crhonek 29. 07. 2015, 13:39:42
Použij csv, zapisuje se do něj fakt rychle, dívej

Kód: [Vybrat]
hodnoty = [1,2,3,4]
f = file("soubor.csv", "w")
delka = len(hodnoty)
for x in range(delka):
    f.write(hodnoty[x] + "\n")

A je to
Bože to je prasárna...


Co je na tom za prasárnu? Ve skole sem za to dostal jednicku a ten ucitel ma vysokou skolu, tak by mi ji asi nedal ne?

Možná jsem jen nepoznal trolla, ale jestli se za toto dneska dávají jedničky, tak je to se školstvím mnohem horší, než se obecně soudí. Nebyl to příklad pro: udělejte na minimálním počtu řádků maximum programátorských chyb?

Kdybys radsi chytraku hned v prvnim prispevku napsal jak je to neprasacky. Nebo jen tak blbe kecas?

Kód: [Vybrat]
hodnoty = [1,2,3,4]
delka = len(hodnoty)
for x in range(delka):

List je sám o sobě iterable, takže zjistit délku listu a potom vygenerovat další list (range) a ten naprat do smyčky je prasárna.

Prvek listu sice můžeme odkazovat indexem, ale když už máme smyčku, tak máme přímo hodnoty:

Kód: [Vybrat]
hodnoty = [1,2,3,4]
for h in hodnoty:
   f.write(h + "\n")

Což je ale ten menší problém a začátečník na to časem přijde.

Dále se nikde nezavírá soubor f, lepší konstrukce je with open() as work_file: což automaticky uzavře a uvolní soubor i při výjimce.

Větší problém je chybné generování výsledného CSV. (Comma separated values) rfc4180

Co když budou hodnoty: ["a,b,c", "1,2", "x"]?

Program vygeneruje výstup, kde na každém řádku bude jiný počet hodnot (dejme tomu sloupců) - což není správné CSV. Vstup je třeba ošetřit.

Dále \n neodpovídá RFC, správně se řádek CSV ukončuje CRLF (\r\n).

Ještě by se dalo diskutovat o tom sčítání stringů apod.

Proto python obsahuje ve standardní knihovně modul pro práci s CSV.
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Snow 29. 07. 2015, 13:51:16
nehlede na to ze spojuje int a str coz nejde...

v tak kratkem kodu nasekat tolik chyb je umeni :-)
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Tomáš Crhonek 29. 07. 2015, 14:00:12
nehlede na to ze spojuje int a str coz nejde...

Pravda.

v tak kratkem kodu nasekat tolik chyb je umeni :-)

jj, sem tam se najde chytrý troll   :)
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: wifina 29. 07. 2015, 14:10:59

jen poznamka k iteraci pres list - nekdy je potreba i index, ruby na to ma cosi, a python taky :
http://stackoverflow.com/questions/522563/accessing-the-index-in-python-for-loops (http://stackoverflow.com/questions/522563/accessing-the-index-in-python-for-loops)
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: rizi 29. 07. 2015, 15:50:29
jj, sem tam se najde chytrý troll   :)

Ale mentálně mě celkem uspokojuje, kolik času ste vrazili do toho mi všechno vyvrátit a ještě mě do puntíku opravit :)
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: mxlbzn 29. 07. 2015, 18:16:09
...

Jo, jasně. A takhle nějak vy a ten váš učitel šifrujete, žejo?

Kód: [Vybrat]
text = "Tohle je tuze tajne"
klic = 3
delka = len(plaintext)
for i in range(delka):
    plaintext[i] = plaintext[i] + klic
print text

RoFl. It is wrong on so many levels..
Název: Re:Python 3.4 - jak uchovat nastavení
Přispěvatel: Snow 29. 07. 2015, 18:49:17
jj, sem tam se najde chytrý troll   :)

Ale mentálně mě celkem uspokojuje, kolik času ste vrazili do toho mi všechno vyvrátit a ještě mě do puntíku opravit :)
neboj tolik času to nebylo, řekl bych asi tak stejně jako napsání toho tvého ukázkového kodu :-)