Riferimenti: SoftPython - formati 1
Esc
Summer School Data Science 2023 - Modulo 1 informatica: Moodle
Docente: David Leoni david.leoni@unitn.it
Esercitatore: Luca Bosotti luca.bosotti@studenti.unitn.it
binari: Sequenze di 0 e 1
.xls
, .xlsx
).ods
).pdf
).jpg
, .jpeg
, .png
, .gif
, .webp
)per essere aperti richiedono librerie specializzate
di testo:
.txt
.csv
, .tsv
.json
.xml
, .html
Apribili anche con Blocco note!
Riferimenti: SoftPython Formati 1 - File a linee
Leonardo
da Vinci
Sandro
Botticelli
Niccolò
Macchiavelli
with open('people-simple.txt', encoding='utf-8') as f:
linea=f.readline()
print(linea)
Leonardo
encoding
¶dipende da sistema operativo, editor
se non specifichi la codifica, Python prova a indovinare...
...se sbaglia -> vedrai caratteri strani (es. quadratini)
Meglio specificare!
il più comune: utf-8
altrimenti, qui in Italia: encoding='latin-1'
Per fare la detection: Charset Normalizer tool online | libreria
Approfondimenti: SoftPython - capitolo Stringhe - encodings
with open('people-simple.txt', encoding='utf-8') as f:
linea=f.readline()
print(linea)
Se non si chiude propriamente un file, si rischiano:
with
CONTESTO
with open
with
...with open('people-simple.txt', encoding='utf-8') as f:
linea=f.readline()
print(linea)
Nella parte as f:
f
ATTENZIONE: ricordati di mettere sempre il carattere dei doppi punti :
alla fine della linea del with
!
with open('people-simple.txt', encoding='utf-8') as f:
nome=f.readline() # sposta in avanti il cursore di lettura
cognome=f.readline() # legge dalla *nuova* posizione del cursore!
print(nome + ' ' + cognome)
Leonardo da Vinci
nome=f.readline()
mette in nome
l'intera linea: vedi problemi?
ATTENZIONE: f.readline()
metterà alla fine il carattere di ritorno a capo \n
with open('people-simple.txt', encoding='utf-8') as f:
nome=f.readline().rstrip() # meglio...
cognome=f.readline().rstrip()
print(nome + ' ' + cognome)
Leonardo da Vinci
while
¶with open('people-simple.txt', encoding='utf-8') as f:
linea=f.readline()
while linea != "":
nome = linea.rstrip()
cognome=f.readline().rstrip()
print(nome + ' ' + cognome)
linea=f.readline()
Leonardo da Vinci Sandro Botticelli Niccolò Macchiavelli
Se siamo alla fine del file (o il file è vuoto):
f.readline()
ritorna una stringa vuotafor
¶with open('people-simple.txt', encoding='utf-8') as f:
for linea in f:
print(linea)
Leonardo da Vinci Sandro Botticelli Niccolò Macchiavelli
non abbiamo più chiamate a f.readline()
Quando incontra il ciclo, Python automagicamente fa un sacco di cose!
for
vs while
¶for
: tipicamente per iterare tutto il file
while
: per maggior controllo
Per esempi di ricerca: Cicli while - ricercare in una sequenza
f
?¶import csv
with open('people-simple.txt', encoding='utf-8', newline='') as f:
print(f)
<_io.TextIOWrapper name='people-simple.txt' mode='r' encoding='utf-8'>
Indovinate...
with open('people-simple.txt', encoding='utf-8', newline='') as f:
print(list(f))
['Leonardo\n', 'da Vinci\n', 'Sandro\n', 'Botticelli\n', 'Niccolò \n', 'Macchiavelli']
with
¶with open('people-simple.txt', encoding='utf-8', newline='') as f:
print(list(f))
print(list(f))
['Leonardo\n', 'da Vinci\n', 'Sandro\n', 'Botticelli\n', 'Niccolò \n', 'Macchiavelli']
[]
ATTENZIONE: qualunque lettura muove in avanti il cursore di lettura!
Alla seconda chiamata il file è ormai 'consumato' e stampa []
f
fuori dal with
¶with open('people-simple.txt', encoding='utf-8') as f:
print("Occhio all'indentazione..")
print(list(f))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
Cell In[16], line 6
4 with open('people-simple.txt', encoding='utf-8', newline='') as f:
5 print("Occhio all'indentazione..")
6
----> 7 print(list(f)) # BOOM!
ValueError: I/O operation on closed file.
with open('people-simple.txt', encoding='utf-8', newline='') as f:
print(list(f))
with open('people-simple.txt', encoding='utf-8', newline='') as f:
print(list(f))
['Leonardo\n', 'da Vinci\n', 'Sandro\n', 'Botticelli\n', 'Niccolò \n', 'Macchiavelli'] ['Leonardo\n', 'da Vinci\n', 'Sandro\n', 'Botticelli\n', 'Niccolò \n', 'Macchiavelli']