Edit detail for Cestina3.x revision 7 of 1

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)

Čeština v Python 3.x

py30.png

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:

  1. 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.
  2. 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)

Komentáře

Řazení --mol, Tue, 24 Apr 2012 22:08:37 +0200 reply

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)