V pátek 6. a sobotu 7. března proběhl v pražském sídle Nejvyššího kontrolního úřadu (NKÚ) Hackathon veřejné správy 7.1. Publikovány byly vytvořené aplikace. V kategorii projektů rozvíjených z krajského kola zvítězil tým „Mackokládi“. Čtyři středoškoláci ze Dvora Králové uspěli s aplikací KompaZ. Jde o digitálního průvodce, který pomůže s rychlou a srozumitelnou orientací v životních i krizových situacích „krok za krokem“. Aplikace
… více »QGIS, svobodný desktopový GIS, byl vydán v nové hlavní verzi 4.0. Změny zahrnují několik nových analytických a editačních funkcí, rozšíření podpory 3D, více možností úprav uživatelského rozhraní či mnoho dalších zlepšení použitelnosti. Řada 3.44 má aktualizace plánovány do září.
Dan Blanchard vydal knihovnu pro Python chardet v nové verzi 7.0.0. S novou verzí byla knihovna přelicencována z LGPL na MIT. Souhlasili s tím všichni přispěvatelé? Dan Blanchard souhlasy vůbec neřešil. Zaúkoloval umělou inteligenci (Claude), aby knihovnu zcela přepsala a výslovně jí nařídil, aby nepoužila žádný LGPL kód. Dan Blanchard tvrdí, že se jedná o clean room design. Protistrana argumentuje, že umělá inteligence byla trénována
… více »Andy Nguyen si na svou herní konzoli PlayStation 5 (PS5) pomocí exploitu Byepervisor nainstaloval Linux (Ubuntu). V Linuxu si spustil Steam a PS5 tak proměnil v Steam Machine. Na PS5 může hrát hry, které jsou vydané pouze pro PC a jsou na Steamu [Tom's Hardware].
Správce sbírky fotografií digiKam byl vydán ve verzi 9.0.0. Jedná se o větší vydání provázené aktualizacemi knihoven. Mnoho dílčích změn se vedle oprav chyb týká uživatelského rozhraní, mj. editace metadat.
Byla vydána verze 2026 distribuce programu pro počítačovou sazbu TeX s názvem TeX Live (Wikipedie). Přehled novinek v oficiální dokumentaci.
Jihokorejská Národní daňová služba (NTS) zabavila kryptoměnu Pre-retogeum (PRTG) v hodnotě 5,6 milionu dolarů. Pochlubila se v tiskové zprávě, do které vložila fotografii zabavených USB flash disků s kryptoměnovými peněženkami spolu se souvisejícími ručně napsanými mnemotechnickými obnovovacími frázemi. Krátce na to byla kryptoměna v hodnotě 4,8 milionu dolarů odcizena. O několik hodin ale vrácena, jelikož PRTG je extrémně nelikvidní, s denním objemem obchodování kolem 332 dolarů a zalistováním na jediné burze, MEXC [Bitcoin.com].
Komunita kolem Linuxu From Scratch (LFS) vydala nové verze knih s návody na instalaci vlastního linuxového systému ze zdrojových kódů Linux From Scratch 13.0 a Beyond Linux From Scratch 13.0. Pouze se systemd.
Byla vydána nová stabilní major verze 25.12 linuxové distribuce primárně určené pro routery a vestavěné systémy OpenWrt (Wikipedie). Jedná se o nástupce předchozí major verze 24.10. Přehled novinek v poznámkách k vydání. Podporováno je více než 2200 zařízení.
Na čem pracují vývojáři webového prohlížeče Ladybird (GitHub)? Byl publikován přehled vývoje za únor (YouTube). Odstraněn byl veškerý kód napsaný ve Swiftu. JavaScriptový engine LibJS byl reimplementován v Rustu.
Po delší odmlce vás vítám u již pátého pokračování seriálu o pythonské knihovně. Dnes se již nebudeme zabývat funkcemi z modulu __builtins__, ale vrhneme se na práci s řetězci. Předpokládám, že většina čtenářů ví, jak se s řetězci pracuje, ale neodpustím si jednoduché opakování.
V Pythonu je možné pracovat se dvěma typy řetězcových objektů. Prvním typem je obyčejný řetězec, který je 8bitový, a jeho interpretace záleží na nastaveném kódování. Druhým jsou Unicode řetězce. Standardně se skládají z 16bitových znaků, které jsou zakódovány ve formátu UCS-2. Od verze 2.2 je možné používat i 32bitové Unicode řetězce kódované v UCS-4; toto nastavení se však povoluje při překladu interpretru. Mezi oběma typy řetězců je možné provádět konverze. Je možné rovněž konvertovat řetězce z/do jiného kódování než je systémové.
Nejdříve se začneme zabývat metodami řetězců. Stejné funkce je možné nalézt i v modulu string, ty jsou však už delší dobu označeny jako deprecated (čili nedoporučované).
Poznámka: Mezi vydáním předchozího a tohoto dílu došlo k uvolnění nové verze Pythonu (v. 2.5). V tomto článku i dalších pokračováních bude na tuto skutečnost brán zřetel a rozdíly mezi jednotlivými verzemi budou komentovány.
Metoda vrací novou kopii řetězce, přičemž první písmeno bude velké. Metoda je pro 8bitové řetězce závislá na nastavení locale.
>>> print "adam".capitalize() Adam >>> print "říman".capitalize() říman >>> print u"říman".capitalize() Říman >>>
Tato metoda vrací také nový řetězec o délce width. Obsah volajícího řetězce je umístěn do jeho středu (vycentrován). Přebývající místo je doplněno znaky fillchar nebo, je-li tento parametr vynechán, mezerami.
>>> retezec = "Kobyla má malý bok" >>> print retezec.center(len(retezec) + 4, '!') !!Kobyla má malý bok!! >>> print retezec.center(len(retezec) + 3, '!') !!Kobyla má malý bok! >>> print retezec.center(len(retezec) - 3, '!') Kobyla má malý bok >>>
Jak je vidět, metoda si poradí i v případě, že vrácený řetězec bude mít lichou délku. V tomto případě se pokusí vycentrovat znaky, jak jen to jde. Předáme-li jako první parametr číslo menší než je délka volajícího řetězce, vrátí se tento řetězec nezměněn.
Tato metoda byla změněna ve verzi 2.4. Byl přidán argument fillchar.
Spočítá počet výskytů podřetězce sub v řetězci, resp. jeho části definované parametry start a stop.
Metoda dekóduje řetězec do Unicode řetězce. Parametr encoding představuje kodek použitý při dekódování. Je-li vynechán, použije se výchozí kódování (ASCII). Druhý parametr nastavuje způsob, s jakým se bude program vyrovnávat s chybami, které mohou při převádění nastat.
Parametry ignore a replace jsou použitelné pouze pro chyby vznikající při převodu. Je-li chyba způsobená neodpovídajícím vstupem, je vyhozena výjimka UnicodeError bezpodmínečně. Například kódování iso-8859-2 a cp1250 nejsou 100% přenositelná. A nechcete-li, aby byla při objevení nekompatibilního znaku vždy vyvolávána výjimka, můžete použít dva výše zmíněné parametry. V prvním případě bude znak ignorován, ve druhém nahrazen.
Použijete-li však řetězec s diakritikou a nastavíte jej jako ASCII, bude vždy vyvolána výjimka. Při převodu z ASCII kódování se totiž kontroluje, zda je hodnota znaku menší než 128 (rozsah základní ASCII je 0 - 127).
Metoda byla přidána do Pythonu ve verzi 2.2 a ve verzi 2.3 byl přidán parametr errors.
>>> unicode = "kobyla má malý bok".decode("utf-8") # utf-8 => unicode
>>> unicode
u'kobyla m\xe1 mal\xfd bok'
# odpovidajici unicode retezec
>>> print unicode
kobyla má malý bok
# zde je videt, ze byl retezec zkonvertovan spravne
>>> iso = "kobyla má malý bok".decode("iso8859-2")
# iso-8859-2 => unicode
>>> iso
u'kobyla m\u0102\u0104 mal\u0102\u02dd bok'
>>> # za kazdy cesky znak se ulozi 2 unicode znaky,
... # protoze me nastaveni locale je utf8 (neASCII
... # znaky jsou vice bytove), ale pri prevodu bylo
... # zadano kodovani iso8859-2 (1 bytove)
...
>>> print iso
kobyla mĂĄ malĂ˝ bok
>>> "kobyla má malý bok".decode()
# neodpovidajici vstup, viz odstavec vyse
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 8:
ordinal not in range(128)
>>>
Metoda encode pracuje opačně než decode. Unicode nebo obyčejný řetězec je zkonvertován do kódování encoding. Pokud budeme konvertovat standardní řetězec, nesmíme zapomenout, že řetězec bude interpretován ve standardním kódování (ASCII). Pro parametr erorrs platí to samé jako u decode, ale přibývají ještě parametry 'xmlcharrefreplace' a 'backslashreplace'. První zakóduje "neobvyklé" znaky (diakritika atd.) pro použití v XML nebo HTML (&#číslo;), druhý použije lomítkovou interpretaci (\\xe1, kde e1 je hexadecimální kód znaku á).
Všechna použitelná kódování je možné nalézt v sekci 4.8.3 Python Library Reference.
Metoda je součástí jazyka od verze 2.0. Parametry xmlcharrefreplace a backslashreplace byly přidány ve verzi 2.3.
>>> retezec = u"kobyla má malý bok"
>>> retezec.encode("utf-8") # unicode => utf-8
'kobyla m\xc3\xa1 mal\xc3\xbd bok'
>>> retezec.encode("iso-8859-2") # unicode => iso-8859-2
'kobyla m\xe1 mal\xfd bok'
>>> retezec.encode("ascii") # ta sama chyba jako u decode
Traceback (most recent call last):
File "", line 1, in ?
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1'
in position 8: ordinal not in range(128)
>>> retezec.encode("ascii", "ignore")
# na rozdil od decode v tomto pripade funguje 'ignore'
'kobyla m mal bok'
>>> retezec.encode("ascii", "replace") # i 'replace'
'kobyla m? mal? bok'
>>> retezec.encode("ascii", "xmlcharrefreplace")
# rozkodovani pro pouziti na webu
'kobyla má malý bok'
>>> retezec.encode("ascii", "backslashreplace")
# a s lomitkovou interpretaci
'kobyla m\\xe1 mal\\xfd bok'
>>> "kobyla ma maly bok".encode() # ASCII => ASCII
'kobyla ma maly bok'
>>> "kobyla ma maly bok".encode("utf-8") # ASCII => utf-8
'kobyla ma maly bok'
>>> print "kobyla ma maly bok".encode("utf-8")
kobyla ma maly bok
>>>
Vrací True, pokud řetězec nebo jeho část [start:end] končí na suffix. Ve verzi 2.5 byla přidána možnost zadat suffix jako n-tici řetězců, které se budou kontrolovat.
Vrací novou kopii řetězce, ve kterém jsou všechny tabulátory nahrazeny mezerami. Počet těchto mezer je udán parametrem tabsize. Je-li tento vynechán, je počet mezer standardně nastaven na 8.
A zde dnešní díl končí. Příště budeme pokračovat dalšími metodami.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
>>> i = "5" >>> i.isdigit() True >>>
$a =~ /^[+-]?\d+(?:\.\d+)?/ a nebo mnohem lépe a radostnějiuse Scalar::Util qw(looks_like_number);
...
if (looks_like_number($a)) {
...
} else {
...
}
...
$a =~ /^[+-]?\d+(?:\.\d+)?/
No fuj...
print "$a je cislo" if ($a eq ($a + 0))
Akorát je neošetřeno explicitní uvedení znaménka + .
Akorát je neošetřeno explicitní uvedení znaménka + .Ano, taková nepodstatná maličkost, když můžeme použít interní funkci perl api
looks_like_number na nímž je Scalar::Util::looks_like_number pouze wrapper. Místo toho necháme perl zavolat tuto funkci hned dvakrát, pokusíme se o sčítání a nakonec ještě budeme porovnávat řetězce s tím výsledkem, že to nefunguje pro všechny případy (hloupé + na začátku). Aneb jak to dělat jednoduše, když to jde složitě, že?
>>> a=["1","2","3","a","b"] >>> ", ".join(a) '1, 2, 3, a, b' >>>