Che materia stai cercando?

Anteprima

ESTRATTO DOCUMENTO

CODEC

Un codec è una codifica di trasformazione: dato un carattere Unicode restituisce la corrispondente

sequenza di byte

Esistono diversi codec compatibili con Unicode, la maggior parte di loro non è in grado di codificare tutti i

caratteri standardizzati dallo Unicode:

– UTF-8: salva i caratteri unicode in 8 bit (può essere usato solo per un sottoinsieme dell’alfabeto unicode)

– UTF-16: salva i caratteri unicode in 16 bit (… come sopra ma valido per un sottoinsieme più ampio, con 16

bit è possibile codificare 216 = 65.000 caratteri distinti)

– …

DIFFERENZE PYTHON 2 E 3

Esistono diverse versioni del linguaggio Python – Python 2.x

– Python 3.x

Ci sono stati dei grossi cambiamenti dalla versione 2.x alla 3.x

Le librerie non sono ancora state adeguate

– per questo motivo la versione 2.x continua ad essere usata da tante persone (compreso il nostro corso)

– La comunità degli sviluppatori Python sta portando avanti le due versioni in parallelo

– La versione 2.x sarà abbandonata fra qualche hanno

Python codifica le stringhe in modo diverso a seconda delle versioni.

Python 2.x :

• Default: memorizza internamente le stringhe usando una codifica a 8 bit salvo diversa indicazione

• necessario indicare la codifica utilizzata

• La codifica utilizzata per interpretare i raw data può essere modificata:

- Utile passando da una nazione all’altra

- Tuttavia è fonte di grossi problemi

- Per interpretare la sequenza di byte, l’interprete python deve capire quale codifica applicare

- Codifica desunta dalle informazioni di localizzazione (maggior dettagli nelle prossime slide)

- A volte la codifica non è individuata correttamente

• problemi difficili da individuare (sorgono quando si cerca di usare una stringa e non quando questa viene

creata/inserita)

• su richiesta, può codificare internamente le singole stringhe in Unicode

Python 3.x :

• Default: memorizza internamente le stringhe come Unicode

• Appena una stringa entra dall’esterno è subito convertita in Unicode

• Problemi identificati in anticipo (segnalati dal fallimento della conversione a Unicode)

CREAZIONE/IMPORTAZIONE DI STRINGHE

• Creazione/input di stringhe in uno script python, scenari:

– Dichiarazione esplicita di variabili

– Lettura di dati da file

– Passaggio parametri in funzioni

– Comunicazioni di rete (non lo trattiamo)

– …

• Vedremo come gestire le codifiche/convertire le stringhe in Unicode nei diversi scenari di cui sopra

• Approccio consigliato : cercate di convertire in Unicode tutto ciò che entra nel vostro script

DIRETTIVA CODING

• La direttiva coding stabilisce come decodificare le variabili create nello script

• Come scelgo la codifica per la direttiva coding?

– #coding=utf8

– #coding:utf16 Alcuni modi corretti di scrivere la direttiva coding

– # -*- coding: latin-1 -*-

• Dipende da come è stato codificato il file .py

• Gli editor di testo non usano tutti la stessa codifica

– Questo è il motivo per cui aprendo un file .txt con editor diversi ... a volte appaiono caratteri strani

– Per conoscere la codifica utilizzata, dovete consultare il manuale dell’editor

DICHIARAZIONE ESPLICITA DI VARIABILI

• Esempio di script a="Cos'è quella scatola?”

print(a)

SyntaxError: Non-ASCII character '\xc3' in file es3_nolocale.py on line 1, but no encoding declared;

• Altro esempio: #coding=utf8 # utf8 è informazione di localizzazione

a="Cos'è quella scatola?”

print(a) # esecuzione senza problemi

• La direttiva coding deve essere inserita nelle prime due righe dello script

• In assenza di direttiva coding, in python 2.x (con x>=5): utilizzata la codifica ASCII

• Si può forzare python 2.x a memorizzare una stringa in Unicode:

#coding=utf8

st='ciao'

unst=st.decode('utf8') #decodifica da utf8 a unicode

print(type(unst),unst) #(<type 'unicode'>, u'ciao')

• … in forma breve

unst=u'ciao’ #equivalente a : unst=‘ciao’.decode(‘…’)

la codifica è quella specificata dalla direttiva coding

• La direttiva coding stabilisce come decodificare solo le variabili create nello script, per le altre variabili …

LIBRERIA CODECS PER I FILE DI TESTO

• Python mette a disposizione la libreria codecs per aprire file di testo con codifiche diverse dalla ASCII

import codecs

f = codecs.open(’file.txt', ‘r’, encoding=’latin1’, errors=‘ignore’)

f.close()

• Permette di specificare dei parametri aggiuntivi rispetto alla open standard. Per il resto, il suo uso è

identico alla libreria standard di apertura dei file – Si può continuare ad usare .read(), .readline() …

• Le stringhe lette dai comandi .read(), .readline(), vengono gestite in memoria come Unicode

f = codecs.open(… encoding='utf-16’, errors=‘ignore’)

Encoding e errors parametri opzionali: - possono non essere usati

- se usato: nome_parametro = valore

• encoding: permette di specificare la codifica

• errors: (possibili valori) ‘strict’, ‘ignore’, ‘replace’

– strict: il programma si blocca e genera un errore se incontra un carattere non riconosciuto nel file

– ignore: i caratteri non riconosciuti sono ignorati (come se non esistessero nel file)

– replace: si sostituisce un carattere speciale ai caratteri non riconosciuti

Esempio import codecs

f = codecs.open(’file.txt', ‘r’, encoding='utf-16’)

for line in f:

values=line.split(u‘;’ )

if values[0]==u”Rossi”:

print(“Trovato”)

f.close()

I dati letti sono tutti memorizzati in stringhe in formato unicode.

STRINGHE E UNICODE

Cosa viene visualizzato (True o False)? #coding=utf8

print('ciao' == u'ciao') True

Cosa viene visualizzato (True o False)? #coding=utf8

print('ciao né' == u'ciao né') False

UnicodeWarning: Unicode equal comparison failed to convert both

arguments to Unicode - interpreting them as being unequal

Python 2.x cerca di convertire in automatico, ma non sempre riesce

encode()

A volte dobbiamo svolgere l’operazione contraria: passare da unicode a (raw) string

Esempio frequente: libreria che richiede stringhe in formato ‘latin1’

#coding=utf8

import mialibreria # mette a disposizione la

# funzione dosomething

st=u'Il libro è sul tavolo'

rst=st.encode('latin1') #da unicode a sequenza di byte

mialibreria.dosomething(rst)

Potete utilizzare i metodi .decode() e .encode() per gestire le conversioni dei parametri in ingresso e in

uscita di una funzione di una libreria esterna.

Creazione di un file .csv per Excel richiede che i .csv siano salvati usando la codifica ‘latin1’

Excel

#coding=utf8

import codecs

f=codecs.open('data.csv','w', encoding='latin1', errors='ignore')

cnt=u"""Nome;Cognome;Età

Nicolò;Daprà;20

Jörge;Würst;21

"""

f.write(cnt) #la libreria codecs esegue la conversione

f.close()

chr() permette di passare da codice ASCII numerico (base 10) a carattere corrispondente >>>chr(60)

‘<‘

unichr() da codice Unicode numerico (base 10) a carattere corrispondente >>>unichr(102)

u’f’

ord() esegue l’operazione inversa: da carattere a codice numerico in base 10 >>>ord(‘<‘) >>>ord(u’f’)

60 102

ALTRE FUNZIONI

I primi 256 caratteri unicode coincidono con i caratteri ASCII: >>>print(chr(60), unichr(60))

('<', u'<')

>>>print(chr(102), unichr(102))

('f', u'f')

E’ possibile scrivere caratteri unicode in questo modo: >>> s1=u'\u2615’ #codice unicode in esadecimale.

>>> print(s1)

>>> s2=u'\u263a’;print(s2)


ACQUISTATO

1 volte

PAGINE

19

PESO

1.21 MB

PUBBLICATO

5 mesi fa


DETTAGLI
Corso di laurea: Corso di laurea in scienze statistiche ed economiche
SSD:
A.A.: 2018-2019

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher aina.belloni di informazioni apprese con la frequenza delle lezioni di Laboratorio di informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Milano Bicocca - Unimib o del prof Boselli Roberto.

Acquista con carta o conto PayPal

Scarica il file tutte le volte che vuoi

Paga con un conto PayPal per usufruire della garanzia Soddisfatto o rimborsato

Recensioni
Ti è piaciuto questo appunto? Valutalo!

Altri appunti di Laboratorio di informatica

Laboratorio informatica
Appunto
Analisi matematica 1
Appunto
Appunti Informatica
Appunto
Apprendimento automatico (machine learning)
Appunto