7 | ||
Editor: mol
Time: 2012/04/24 22:11:37 GMT+2 |
||
Note: Řazení |
changed: - Čeština v Python 3.x ============================ .. image:: py30.png :align: right .. contents:: Obsah Bylo zcela změněn přístup Python k unicode znakům. Zmizela povinné u"" před řetězci, nyní je u"" všechno. Práce s národními abecedami je velmi průhledná a funkční. Kódování vlastního textu programu --------------------------------- Pro správné fungování češtiny v samotném programu je třeba dodržet 2 hlavní zásady: #. Na první řádce uvést pythonovskou definici kódování, tedy např.: # -*- coding: utf-8 -*-. Je silně doporučováno používat kodování utf8. Toto kodování je nyní defaultní pro všechny zdrojové soubory Pythonu. Dokonce se ani nemusí nemusí na první řádce uvádět - pokud není kodování nadeklarováno předpokládá se automaticky utf-8. #. V tom stejném kodování to uložit - například v !PSPadu navolit menu Formát - UTF-8 a uložit :: veta="Žluťoučký kůň pěl ďábelské ódy." print (veta) Kódování vstupů --------------------------------- Máte-li ve svém programu žádost na vstup od uživatele raw_input(), je hodnota vrácena v kódování, které získáte příkazem:: import sys print (sys.stdin.encoding) Standardně pod Windows se jedná o cp852, pod Linuxem ... Používáte-li jakékoliv GUI a žádáte uživatele o vstup, bude kódování s největší pravděpodobností utf-8. Jinými slovy u GUI aplikací neplatí sys.stdin.encoding. Kódování názvů souborů a adresářů --------------------------------- :: import sys print (sys.getfilesystemencoding()) # kodování souborového systému Kódování obsahu souborů --------------------------------- Platí, že se nedá "přesně určit", "automaticky detekovat", v jakém kódování, je ten který text. Dá se to "odhadnout" - umí to např. unixový program file a enca. Tyto programy se dají najít i pro Windows, ale je problém je pod Windows rozchodit (kompilace). Nejjistější zůstává určovat kódování přesně a ručně - tedy třeba u textových editorů nechat uživatele, ať si zvolí sám, nebo u přijímaných dat si nechávat posílat i kódování. Výjimku tvoří kódování textu v utf-8, kde platí .... doplnit ..... Kódování defaultencoding --------------------------------- :: import sys print (sys.getdefaultencoding()) Malá písmena na velká (po česku) --------------------------------- :: import locale print ("řčššě".upper()) Řazení (po česku) --------------------------------- :: seznam=["žízeň", "zábava", "údy", "uzel", "chlap", "čumil", "důkaz", "civil", "řetěz", "rozum", "ábel", "atom", "óda", "ovar"] seznam.sort() for slovo in seznam: print (slovo) Převod mezi různými znakovými sadami --------------------------------- Například před z 1250 do utf8:: inFile=open("cp1250.txt","r",encoding="cp1250") outFile=open("utf8.txt","w",encoding="utf-8") for i in inFile.read(): outFile.write(i) inFile.close() outFile.close() nebo i takto moderněji:: with open("cp1250.txt","r",encoding="cp1250") as inFile: with open("utf8.txt","w",encoding="utf-8") as outFile: for i in inFile.read(): outFile.write(i) Odstranění diakritiky --------------------------------- :: import unicodedata line="Žluťoučký kůň pěl Ďábelské ody" line = unicodedata.normalize('NFKD', line) output = '' for c in line: if not unicodedata.combining(c): output += c print (output) Záložky, Oblíbené ----------------- Unicode HOWTO: http://docs.python.org/3.0/howto/unicode.html Komentáře --------------------------------- From mol Tue Apr 24 22:08:37 +0200 2012 From: mol Date: Tue, 24 Apr 2012 22:08:37 +0200 Subject: Řazení Message-ID: <20120424220837+0200@www.py.cz> Já jsem pro správné řazení pod Windows (Py 3.2.3 64bit) musel udělat: :: import locale locale.setlocale(locale.LC_ALL,'czech') seznam.sort(key=locale.strxfrm)
Obsah
Bylo zcela změněn přístup Python k unicode znakům. Zmizela povinné u"" před řetězci, nyní je u"" všechno. Práce s národními abecedami je velmi průhledná a funkční.
Pro správné fungování češtiny v samotném programu je třeba dodržet 2 hlavní zásady:
veta="Žluťoučký kůň pěl ďábelské ódy." print (veta)
Máte-li ve svém programu žádost na vstup od uživatele raw_input(), je hodnota vrácena v kódování, které získáte příkazem:
import sys print (sys.stdin.encoding)
Standardně pod Windows se jedná o cp852, pod Linuxem ...
Používáte-li jakékoliv GUI a žádáte uživatele o vstup, bude kódování s největší pravděpodobností utf-8. Jinými slovy u GUI aplikací neplatí sys.stdin.encoding.
import sys print (sys.getfilesystemencoding()) # kodování souborového systému
Platí, že se nedá "přesně určit", "automaticky detekovat", v jakém kódování, je ten který text. Dá se to "odhadnout" - umí to např. unixový program file a enca. Tyto programy se dají najít i pro Windows, ale je problém je pod Windows rozchodit (kompilace).
Nejjistější zůstává určovat kódování přesně a ručně - tedy třeba u textových editorů nechat uživatele, ať si zvolí sám, nebo u přijímaných dat si nechávat posílat i kódování.
Výjimku tvoří kódování textu v utf-8, kde platí .... doplnit .....
import sys print (sys.getdefaultencoding())
import locale print ("řčššě".upper())
seznam=["žízeň", "zábava", "údy", "uzel", "chlap", "čumil", "důkaz", "civil", "řetěz", "rozum", "ábel", "atom", "óda", "ovar"] seznam.sort() for slovo in seznam: print (slovo)
Například před z 1250 do utf8:
inFile=open("cp1250.txt","r",encoding="cp1250") outFile=open("utf8.txt","w",encoding="utf-8") for i in inFile.read(): outFile.write(i) inFile.close() outFile.close()
nebo i takto moderněji:
with open("cp1250.txt","r",encoding="cp1250") as inFile: with open("utf8.txt","w",encoding="utf-8") as outFile: for i in inFile.read(): outFile.write(i)
import unicodedata line="Žluťoučký kůň pěl Ďábelské ody" line = unicodedata.normalize('NFKD', line) output = '' for c in line: if not unicodedata.combining(c): output += c print (output)
Unicode HOWTO: http://docs.python.org/3.0/howto/unicode.html