Hru Warhammer: Vermintide 2 (ProtonDB) lze na Steamu získat zdarma napořád, když aktivaci provedete do pondělí 24. listopadu.
Virtualizační software Xen (Wikipedie) byl vydán v nové verzi 4.21. Podrobnosti v poznámkách k vydání a přehledu nových vlastností.
Evropská komise schválila český plán na poskytnutí státní pomoci v objemu 450 milionů eur (téměř 11 miliard Kč) na rozšíření výroby amerického producenta polovodičů onsemi v Rožnově pod Radhoštěm. Komise o tom informovala v dnešní tiskové zprávě. Společnost onsemi by podle ní do nového závodu v Rožnově pod Radhoštěm měla investovat 1,64 miliardy eur (téměř 40 miliard Kč).
Microsoft v příspěvku na svém blogu věnovaném open source oznámil, že textové adventury Zork I, Zork II a Zork III (Wikipedie) jsou oficiálně open source pod licencí MIT.
První prosincový týden proběhne SUSE Hack Week 25. Zaměstnanci SUSE mohou věnovat svůj pracovní čas libovolným open source projektům, například přidání AI agenta do Bugzilly, implementaci SSH v programovacím jazyce Zig nebo portaci klasických her na Linux. Připojit se může kdokoli.
Google oznámil, že Quick Share na Androidu funguje s AirDropem na iOS. Zatím na telefonech Pixel 10. Uživatelé tak mohou snadno přenášet soubory z telefonů s Androidem na iPhony a obráceně.
Byla vydána nová verze 8.5 (8.5.0) skriptovacího jazyka PHP používaného zejména k vývoji dynamických webových stránek. Přináší řadu novinek a vylepšení (URI Extension, Pipe Operator, Clone With, …). Vydána byla také příručka pro přechod z předchozích verzí.
Evropská komise zahájila tři vyšetřování týkající se cloudových platforem Amazon Web Services (AWS) a Microsoft Azure. Evropská exekutiva, která plní také funkci unijního antimonopolního orgánu, chce mimo jiné určit, zda jsou americké společnosti Microsoft a Amazon v cloudových službách takzvanými gatekeepery, tedy hráči, kteří významně ovlivňují provoz internetu a musí dle nařízení o digitálních trzích (DMA) na společném trhu
… více »Společnost Meta Platforms vyhrála ostře sledovaný spor o akvizici sítě pro sdílení fotografií Instagram a komunikační aplikace WhatsApp. Podle amerického soudu firma jejich převzetím neporušila antimonopolní zákon, protože si tak nemonopolizovala trh sociálních sítí. Žalobu na Metu podala před pěti lety americká Federální obchodní komise (FTC). FTC argumentovala, že Meta, tehdy známá jako Facebook, koupila tyto dvě společnosti v letech 2012 a 2014 proto, aby s nimi nemusela soutěžit.
Home Assistant včera představil svůj nejnovější oficiální hardware: Home Assistant Connect ZBT-2 pro připojení zařízení na sítích Zigbee nebo Thread.
Tato metoda pracuje přesně naopak než metoda join. Vrátí seznam slov volajícího řetězce, která jsou oddělena parametrem sep. Není-li sep zadán, nebo pokud je None, používají se jako oddělovače bílé znaky. Parametr maxsplit představuje, kolik rozdělení bude provedeno, zbytek řetězce je uložen na poslední místo v seznamu. Vrácený seznam bude tedy mít velikost maxsplit + 1. Pokud metoda narazí na dva oddělovače bezprostředně vedle sebe, vrátí prázdný řetězec. Jako oddělovač nemusí být použit jen jeden znak, zadáte-li delší řetězec, bude použit pro separaci. Má-li metoda rozdělit prázdný řetězec a byl jí předán parametr sep, vrátí jednoprvkový seznam obsahující prázdný řetězec. Pokud jí však nebude parametr předán, vrátí prázdný seznam.
>>> "1, 2, 3, 4".split(',')
['1', ' 2', ' 3', ' 4']
>>> "1, 2, 3, 4".split(", ")
['1', '2', '3', '4']
>>> "1,2,3,,5,6,,,9".split(',')
['1', '2', '3', '', '5', '6', '', '', '9']
>>> "1 2 3 4 5".split()
['1', '2', '3', '4', '5']
>>> ''.split('a')
['']
>>> ''.split()
[]
>>>
Vrátí seznam řádků volajícího řetězce. Čili jako oddělovač bude použit znak přechodu na nový řádek. Pokud budete chtít ponechat znaky pro přechod na nový řádek jako součásti jednotlivých fragmentů, musíte jako argument metody předat True.
>>> f = file("std_lib-7.html", 'r')
>>> x = f.read(300)
>>> x.splitlines()
['Standardn\xc3\xad knihovna pro Python - 7 (\xc5\x99et\xc4\x9bzce III)',
'', '', '<dl>', '<dt><tt>split([sep[,maxsplit]])</tt></dt>', '<dd>',
'<p>Tato metoda pracuje p\xc5\x99esn\xc4\x9b naopak ne\xc5\xbe metoda join.
Vr\xc3\xa1t\xc3\xad seznam slov volaj\xc3\xadc\xc3\xadho ',
'\xc5\x99et\xc4\x9bzce, kter\xc3\xa1 jsou odd\xc4\x9blena parametrem sep.
Nen\xc3\xad-li sep zad\xc3\xa1n, nebo pokud je None, ',
'pou\xc5\xbe\xc3\xadvaj\xc3\xad']
>>> x.splitlines(True)
['Standardn\xc3\xad knihovna pro Python - 7 (\xc5\x99et\xc4\x9bzce III)\n',
'\n', '\n', '<dl>\n', '<dt><tt>split([sep[,maxsplit]])</tt></dt>\n', '<dd>\n',
'<p>Tato metoda pracuje p\xc5\x99esn\xc4\x9b naopak ne\xc5\xbe metoda join.
Vr\xc3\xa1t\xc3\xad seznam slov volaj\xc3\xadc\xc3\xadho \n',
'\xc5\x99et\xc4\x9bzce, kter\xc3\xa1 jsou odd\xc4\x9blena parametrem sep.
Nen\xc3\xad-li sep zad\xc3\xa1n, nebo pokud je None, \n',
'pou\xc5\xbe\xc3\xadvaj\xc3\xad']
>>>
Vrátí True, pokud volající řetězec obsahuje prefix na začátku. Od verze 2.5 může být prefix také n-tice obsahující možnosti, které se mají porovnávat. Ke specifikaci rozsahu, který se má prohledávat, slouží parametry start a end.
>>> s = "/usr/local/bin/python2.5"
>>> s.startswith("/usr/local/bin")
True
>>> s.startswith(("/usr/bin", "/usr/sbin", "/usr/local/bin"))
True
>>> s.startswith("/bin",10)
True
>>> s.startswith("/bin",10, 12)
False
>>>
Vrací kopii řetězce, která je oříznutá zprava i zleva. Argument chars obsahuje množinu všech znaků, které mají být oříznuty. Odstraňování znaků bude přerušeno v momentě, kdy metoda narazí na znak, který není uveden v chars. V případě, že bude parametr vynechán, budou se ořezávat pouze mezery.
Na příkladu je vidět, že metody lstrip a rstrip (viz minulý díl) pouze rozšiřují funkci strip.
>>> s = "www.abclinxu.cz"
>>> s.strip("wcz.")
'abclinxu'
>>> s.lstrip("wcz.").rstrip("wcz.")
'abclinxu'
>>>
Vrací kopii řetězce, která má zaměněny velikosti znaků. Tj. malá písmena se změní na velká a naopak. U 8bitových znaků záleží na nastavení locale.
>>> "MALA pismena velka PISMENA".swapcase() 'mala PISMENA VELKA pismena' >>> print "MALÁ písmena velká PÍSMENA".swapcase() malÁ PíSMENA VELKá pÍsmena >>> print u"MALÁ písmena velká PÍSMENA".swapcase() malá PÍSMENA VELKÁ písmena >>>
Vrací řetězec ve formátu nadpisu - všechna počáteční písmena jsou velká. Stejně jako u předcházející metody jsou 8bitové řetězce závislé na nastavení locale.
>>> "standardni knihovna pro python".title() 'Standardni Knihovna Pro Python' >>> print "česká republika".title() čEská Republika >>> print u"česká republika".title() Česká Republika >>>
Vrací nový řetězec, který je přemapován pomocí převodní tabulky table. Znaky uvedené v parametru deletechars jsou z řetězce odstraněny před jeho převodem. table musí být řetězec o 256 znacích. Tabulka se vytváří pomocí funkce string.maketrans().
# -*- coding: iso-8859-2 -*-
import string
line="Žluťoučký kůň pěl ďábelské ódy"
table=string.maketrans("áčďéěíňóřšťúůýžÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ",\
"acdeeinorstuuyzACDEEINORSTUUYZ")
print line.translate(table)
Použitý příklad je z webu py.cz.
Funkce maketrans (potažmo translate) nepracovala korektně při použití systémového kódování UTF-8. Nebo alespoň mně se nepodařilo zjistit, jak s ním pracovat. Jediné, co mi Google prozradil, je, že "translate and maketrans don't love utf-8" (viz converting some french chars with python. Příklad použití utf-16, který mi však s češtinou nefungoval (francouzsky však ano :-/).
import string
french=u"15 résultats trouvés".encode("utf_16")
sfrom = u"àâäéèêëïîôöûùüç".encode("utf_16")
sto = u"aaaeeeeiioouuuc".encode("utf_16")
print french.translate( string.maketrans(sfrom,sto) )
Máte-li někdo nějaké zkušenosti s kódováním utf-8, uveďte je, prosím, v diskuzi.
Převede všechny znaky na velké. Pro korektní převádění českých znaků v obyčejných řetězcích musíte mít správně nastavené locale.
Vrací nový řetězec o délce width, který je zleva vyplněn znaky 0. width musí být větší než délka volajícího řetězce, jinak je vrácen tento řetězec nezměněn.
>>> "255".zfill(5) '00255' >>>
Tímto ukončíme povídání o metodách řetězců. V příštích několika dílech si budeme povídat o modulu re, to jest o regulárních výrazech. Ty slouží k vyhledávání dat v řetězcích podle určitého vzoru - ale nerad bych moc předbíhal.
Nástroje: Tisk bez diskuse
Tiskni
Sdílej:
Zjevně i Pythonu nějaký ten krůček do úplné unicodizace chybí. Za modul unicodedata budiž ovšem had blahoslaven a veleben.
Pro překódování řetězce odněkud někam je lepší použít encode/recode. Pro "hádání" kódování slouží Yetiho enca se svým pythonovským modulem pyenca. Pro odstranění diakritiky lze využít výše zmíněný modul unicodedata.
Jo a díky za pěkný článek!
def deaccent(unistr):
return "".join(aChar
for aChar in unicodedata.normalize("NFD", unistr)
if "COMBINING" not in unicodedata.name(aChar))
def deaccent(unistr):
return "".join(aChar
for aChar in unicodedata.normalize("NFD", unistr)
if not unicodedata.combining(aChar))
bude očividně mnohem rychlejší.
Budu si ten modul muset prostudovat.
Zkusil jsem si s tím taky pohrát a dostal jsem se do svízele s tím, že vlastně nechápu, k čemu se to vlastně používá. Má to smysl možná tehdy, když musí být výsledkem ascii řetězec, a pak pouhé odstranění akcentů nestačí. Zde je ukázka několika možností:
#!/usr/bin/env python
#coding: utf-8
import unicodedata
def deaccent(unistr):
return "".join(aChar
for aChar in unicodedata.normalize("NFD", unistr)
if not unicodedata.combining(aChar))
old_cz = u'áÁčČďĎěĚéÉíÍňŇóÓřŘšŠťŤúÚůŮýÝžŽ'
old_fr = u'ôœùûüÿàâçéèêëïîÔŒÙÛÜŸÀÂÇÉÈÊËÏÎ'
old = old_cz + old_fr
print old
print deaccent(old)
print deaccent(old).encode('ascii', 'replace')
print deaccent(old).encode('ascii', 'ignore')
print unicodedata.normalize('NFKD', old).encode('ascii', 'ignore')
print unicodedata.normalize('NFKD', old).encode('ascii', 'replace')
Výsledek je toto:
áÁčČďĎěĚéÉíÍňŇóÓřŘšŠťŤúÚůŮýÝžŽôœùûüÿàâçéèêëïîÔŒÙÛÜŸÀÂÇÉÈÊËÏÎ aAcCdDeEeEiInNoOrRsStTuUuUyYzZoœuuuyaaceeeeiiOŒUUUYAACEEEEII aAcCdDeEeEiInNoOrRsStTuUuUyYzZo?uuuyaaceeeeiiO?UUUYAACEEEEII aAcCdDeEeEiInNoOrRsStTuUuUyYzZouuuyaaceeeeiiOUUUYAACEEEEII aAcCdDeEeEiInNoOrRsStTuUuUyYzZouuuyaaceeeeiiOUUUYAACEEEEII a?A?c?C?d?D?e?E?e?E?i?I?n?N?o?O?r?R?s?S?t?T?u?U?u?U?y?Y?z?Z? o??u?u?u?y?a?a?c?e?e?e?e?i?i?O??U?U?U?Y?A?A?C?E?E?E?E?I?I?Jak je vidět, s češtinou celkem není problém, a proto pro ni lze na netu najít tolik více či méně korektních postupů. Ale zkusil jsem francouzštinu a pro ascii reprezentaci by to ještě chtělo spravit ty ligatury.
>>> import unicodedata >>> unicodedata.name(u'Œ') 'LATIN CAPITAL LIGATURE OE' >>> unicodedata.name(u'Æ') 'LATIN CAPITAL LETTER AE'Konverze do ASCII (nebo spíš latin-1?) by IMHO locale-dependent být nemusela. Ale nejsem si jistý. Za přečtení stojí tohleto: http://effbot.org/zone/unicode-convert.htm Uf. Radši akcenty nikdy neodstraňovat.
A když už jsme u těch akademických debat, zdá se, že pro převod do ASCII se při normalizaci víc hodí parametr 'NFKD' (místo 'NFD'), přestože ničí část informace. Například:
>>> ctvrtka = u'\N{VULGAR FRACTION ONE QUARTER}'
>>> print unicodedata.normalize('NFKD', ctvrtka)
1⁄4
>>> print unicodedata.normalize('NFD', ctvrtka)
¼
Bohužel, někteří často pomocí skriptů převádějí do ASCII názvy souborů a adresářů. Takže když bude v názvu jedna čtvrtina, vyrobí se z toho nadbytečné lomítko, které v cestě nadělá paseku. No teoreticky by se to stát mohlo, no ne?