Leggere un file TXT
proverbs_file = open("proverbi.txt")
print(proverbs_file)
proverbs_file.seek(0)
Il puntatore ora verrà posizionato alla fine, se riproveremo a stampare il file avrevo un outpt vuoto. Va perciò aggiunto il metodo.seek(0) che ricolloca il puntatore in posizione zero.
E’ anche possibile leggere il contenuto di un file riga per riga usando il metodo read_lines()
proverbs_file.seek(0) proverbs_file.readlines()
La funzione ha ritornato una lista con ogni riga del file. Possiamo iterare sulla lista ritornata dal metodo readlines.
proverbs_file.seek(0)
for proverb in proverbs_file.readlines():
print("Proverbio: %s" % proverb[:-1]) # rimuoviamo l'ultimo carattere che rappresenta una nuova linea (\n)
Proverbio: A buon intenditor, poche parole. Proverbio: A caval donato non si guarda in bocca. Proverbio: Anno nuovo, vita nuova. Proverbio: Bacco, Tabacco e Venere, riducon l’uomo in cenere. Proverbio: Buon sangue non mente. Proverbio: Campa cavallo che l’erba cresce. Proverbio: Can che abbaia non morde. Proverbio: Chi ben comincia è alla metà dell’opera. Proverbio: Chi è causa del suo mal, pianga se stesso. Proverbio: Chi la dura, la vince. Proverbio: Chiodo scaccia chiodo. Proverbio: Tanto la va la gatta al lardo che ci lascia lo zampino.
Chiusura di un file
Quando non abbiamo più bisogno del file, dobbiamo sempre ricordare di chiuderlo utilizzando il metodo close().
proverbs_file.close()
Per evitare questo inconveniente si utilizza anche un altro metodo per leggere i file che chiude automaticamente il file quando usciamo dal contesto.
with open("proverbi.txt") as proverbs_file:
proverbs = proverbs_file.readlines()
# stampiamo il primo proverbio
print(proverbs[0])
# stampiamo l'ultimo proverbio
print(proverbs[-1])
A buon intenditor, poche parole.
Tanto la va la gatta al lardo che ci lascia lo zampino.
Scrivere su di un file
Per poter scrivere all’interno di un file dobbiamo aprire il file con i giusti permessi specificati nella funzione open:
- r: apre il file in sola lettura (modalità di default)
- r+: apre i file in lettura e scrittura, il puntatore viene posizionato all’inzio del file.
- w: apre il file in sola scrittura, se il file esiste lo sovrascrive, se non esiste lo crea.
- w+: apre il file in lettura e scrittura, se il file esiste lo sovrascrive, se non esiste lo crea.
- a: apre il file in scrittura senza sovrascrivere il contenuto corrente.
- a+: apre il file in lettura e scrittura senza sovrascrivere il contenuto corrente. Se il file non esiste lo crea.
proverbs_file = open("proverbi.txt", 'a+')
proverb = "\nIl vino buono sta nelle botti piccole"
proverbs_file.write(proverb)
proverbs_file.seek(0)
proverbs_file.read()
proverbs_file.close()
Creazione di un nuovo file
Possiamo creare un nuovo file con la funzione open utilizzando w (solo scrittura) o w+ (lettura e scrittura) come permessi.
proverbs_file = open('proverbi.txt')
new_proverbs_file = open('nuovi_proverbi.txt','w+')
Se dai uno sguardo alla tua directory corrente troverai al suo interno, oltre al file proverbi.txt, un nuovo file nuovi_proverbi.txt, per adesso vuoto. Scriviamoci dentro i primi 3 proverbi del file proverbi.txt.
for i,proverb in enumerate(proverbs_file.readlines()):
if(i>=3):
break
print(proverb)
new_proverbs_file.write(proverb)
Leggere file in formato binario
Di defaul la funzione open interpreta il contenuto del file come del testo, ma ci può capitare di dover aprire dei file che non contengono del testo, in tal caso posiamo aprirli in formato binario. Per farlo dobbiamo semplicemente aggiungere un carattere b ai permessi.
with open("proverbi.txt", "rb") as proverbs_file:
proverbs = proverbs_file.readlines()
print(proverbs)
print(type(proverbs[0]))
[b'A buon intenditor, poche parole. \r\n', b'A caval donato non si guarda in bocca. \r\n', b'Anno nuovo, vita nuova. \r\n', b'Bacco, Tabacco e Venere, riducon l\xe2\x80\x99uomo in cenere. \r\n', b'Buon sangue non mente. \r\n', b'Campa cavallo che l\xe2\x80\x99erba cresce. \r\n', b'Can che abbaia non morde. \r\n', b'Chi ben comincia \xc3\xa8 alla met\xc3\xa0 dell\xe2\x80\x99opera. \r\n', b'Chi \xc3\xa8 causa del suo mal, pianga se stesso.\r\n', b'Chi la dura, la vince. \r\n', b'Chiodo scaccia chiodo. \r\n', b'Tanto la va la gatta al lardo che ci lascia lo zampino. '] <class 'bytes'>
Operare su file CSV
Il modulo CSV permette di operare su file csv in Python. Possiamo aprire un file csv passando il file alla classe DictReader.
import csv
line_count = 0
with open('shirts.csv') as csv_file:
csv_reader = csv.reader(csv_file)
for row in csv_reader:
if line_count==0:
print("Columns names:",row)
else:
print(f"Row {line_count}:",row)
line_count+=1
Columns names: ['', 'taglia', 'colore', 'prezzo']
Row 1: ['0', 'S', 'bianco', '4.99']
Row 2: ['1', 'M', 'bianco', '19.99']
Row 3: ['2', 'XL', 'bianco', '12.49']
Row 4: ['3', 'XL', 'bianco', '14.99']
Row 5: ['4', 'S', 'bianco', '14.99']
Row 6: ['5', 'S', 'verde', '7.99']
Row 7: ['6', 'M', 'verde', '4.99']
...
import csv
with open('shirts.csv') as csv_file:
csv_reader = csv.DictReader(csv_file)
print(csv_reader.fieldnames) # stampiamo i nomi delle colonne
['', 'taglia', 'colore', 'prezzo']
Possiamo iterare sulle varie colonne del file, ogni colonna sarà un dizionario.
import csv
with open('shirts.csv') as csv_file:
csv_reader = csv.DictReader(csv_file)
print("%s\t%s\t%s\t" % tuple(csv_reader.fieldnames[1:]))
for row in csv_reader:
print("%s\t%s\t%s\t" % (row['taglia'], row["colore"], row["prezzo"]))
taglia colore prezzo
S bianco 4.99
M bianco 19.99
XL bianco 12.49
XL bianco 14.99
S bianco 14.99
S verde 7.99
...
import csv
with open('shirts.csv', mode='a', newline='') as csv_file:
csv_file.write("\n")
csv_writer = csv.writer(csv_file)
csv_writer.writerow([100, "XL", "ciano", 39.99])
csv_writer.writerow([101, "XXL", "magenta", 59.99])
with open('shirts2.csv', mode='a') as csv_file:
columns = ["id", "taglia", "colore", "prezzo"]
csv_writer = csv.DictWriter(csv_file, fieldnames=columns)
csv_writer.writeheader()
csv_writer.writerow({'id':1, 'taglia': 'XL', 'colore': 'ciano', 'prezzo': 39.99})
csv_writer.writerow({'id':2, 'taglia': 'XXL', 'colore': 'magenta', 'prezzo': 59.99})
… e i TSV?
import csv
with open('shirts.tsv') as csv_file:
csv_reader = csv.DictReader(csv_file, delimiter="\t")
print("%s\t%s\t%s\t" % tuple(csv_reader.fieldnames[1:]))
for row in csv_reader:
print("%s\t%s\t%s\t" % (row['taglia'], row["colore"], row["prezzo"]))
taglia colore prezzo
S bianco 4.99
M bianco 19.99
XL bianco 12.49
XL bianco 14.99
with open('shirts2.tsv', mode='a') as csv_file:
columns = ["id", "taglia", "colore", "prezzo"]
csv_writer = csv.DictWriter(csv_file, fieldnames=columns, delimiter="\t")
csv_writer.writeheader()
csv_writer.writerow({'id':1, 'taglia': 'XL', 'colore': 'ciano', 'prezzo': 39.99})
csv_writer.writerow({'id':2, 'taglia': 'XXL', 'colore': 'magenta', 'prezzo': 59.99})
Operare su file JSON
import json
inventory = {
"abbigliamento":{
"magliette":[
{"taglia":"XL", "colore":"rosso", "prezzo":14.99},
{"taglia":"L", "colore":"blu", "prezzo":16.99},
{"taglia":"L", "colore":"bianco", "prezzo":12.99}
],
"pantaloni":[
{"taglia":46, "colore":"nero", "prezzo":24.99},
{"taglia":48, "colore":"nero", "prezzo":24.99},
{"taglia":50, "colore":"bianco", "prezzo":22.99}
]
},
"accessori":{
"borsa":
[
{"marca":"Alvaro Vitali", "prezzo":79.99},
{"marca":"Ingino Massini", "prezzo":49.99},
],
"cinture":[
{"colore":"nero", "prezzo":8.99},
{"colore":"marrone", "prezzo":8.99}
]
}
}
inventory_str = json.dumps(inventory)
print(type(inventory_str))
print(inventory_str)
<class 'str'>
{"abbigliamento": {"magliette": [{"taglia": "XL", "colore": "rosso", "prezzo": 14.99}, {"taglia": "L", "colore": "blu", "prezzo": 16.99}, {"taglia": "L", "colore": "bianco", "prezzo": 12.99}], "pantaloni": [{"taglia": 46, "colore": "nero", "prezzo": 24.99}, {"taglia": 48, "colore": "nero", "prezzo": 24.99}, {"taglia": 50, "colore": "bianco", "prezzo": 22.99}]}, "accessori": {"borsa": [{"marca": "Alvaro Vitali", "prezzo": 79.99}, {"marca": "Ingino Massini", "prezzo": 49.99}], "cinture": [{"colore": "nero", "prezzo": 8.99}, {"colore": "marrone", "prezzo": 8.99}]}}
inventory = json.loads(inventory_str)
print(type(inventory))
print(inventory)
<class 'dict'>
{'abbigliamento': {'magliette': [{'taglia': 'XL', 'colore': 'rosso', 'prezzo': 14.99}, {'taglia': 'L', 'colore': 'blu', 'prezzo': 16.99}, {'taglia': 'L', 'colore': 'bianco', 'prezzo': 12.99}], 'pantaloni': [{'taglia': 46, 'colore': 'nero', 'prezzo': 24.99}, {'taglia': 48, 'colore': 'nero', 'prezzo': 24.99}, {'taglia': 50, 'colore': 'bianco', 'prezzo': 22.99}]}, 'accessori': {'borsa': [{'marca': 'Alvaro Vitali', 'prezzo': 79.99}, {'marca': 'Ingino Massini', 'prezzo': 49.99}], 'cinture': [{'colore': 'nero', 'prezzo': 8.99}, {'colore': 'marrone', 'prezzo': 8.99}]}}
Lettura e scrittura da file
with open("inventory.json", "w") as json_file:
json.dump(inventory, json_file, indent = 6)
with open("inventory.json") as json_file:
inventory = json.load(json_file)
print(type(inventory))
print(inventory)
<class 'dict'>
{'abbigliamento': {'magliette': [{'taglia': 'XL', 'colore': 'rosso', 'prezzo': 14.99}, {'taglia': 'L', 'colore': 'blu', 'prezzo': 16.99}, {'taglia': 'L', 'colore': 'bianco', 'prezzo': 12.99}], 'pantaloni': [{'taglia': 46, 'colore': 'nero', 'prezzo': 24.99}, {'taglia': 48, 'colore': 'nero', 'prezzo': 24.99}, {'taglia': 50, 'colore': 'bianco', 'prezzo': 22.99}]}, 'accessori': {'borsa': [{'marca': 'Alvaro Vitali', 'prezzo': 79.99}, {'marca': 'Ingino Massini', 'prezzo': 49.99}, {'marca': 'Carmelino Panettiere', 'prezzo': 149.99}], 'cinture': [{'colore': 'nero', 'prezzo': 8.99}, {'colore': 'marrone', 'prezzo': 8.99}]}, 'gift card': [10, 50, 100]}
with open("inventory.json", "r+") as json_file:
inventory = json.load(json_file)
inventory["accessori"]["borsa"].append({"marca":"Carmelino Panettiere", "prezzo":149.99})
inventory["gift card"] = [10, 50 ,100]
json_file.seek(0)
json.dump(inventory, json_file, indent = 6)

Lascia un commento