# Scrive un file.
out_file = open("test.txt","w")
out_file.write("This Text is going to out file\nLook at it and see\n")
out_file.close()
# Legge un file.
in_file = open("test.txt","r")
text = in_file.read()
in_file.close()
print text,
This Text is going to out file Look at it and see
\n nella stringa dice
a Python di andare a capo (newline) nel punto in cui compare.
Una panoramica sul file IO:
open
Il primo passo è usare un oggetto file grazie alla funzione
open. La sintassi è
oggetto_file = open (nome_file, modo) dove oggetto_file
è la variabile contenente l'oggetto file, nome_file la stringa
con il nome del file, e modo la modalità di apertura del file:
"r" in lettura (read), "w" in scrittura
(write). Dopodiché potrete chiamare le funzioni dell'oggetto
file. Le due funzioni più comuni sono read e write. La
funzione write aggiunge una stringa alla fine del file. La
funzione read legge il file e ne ritorna il contenuto
sottoforma di stringa. Se non vi sono argomenti, ritorna l'intero file
(come nell'esempio).
Questa è una nuova versione dell'agenda telefonica che abbiamo scritto precedentemente:
import string
true = 1
false = 0
def print_numbers(numbers):
print "Telephone Numbers:"
for x in numbers.keys():
print "Name: ",x," \tNumber: ",numbers[x]
print
def add_number(numbers,name,number):
numbers[name] = number
def lookup_number(numbers,name):
if numbers.has_key(name):
return "The number is "+numbers[name]
else:
return name+" was not found"
def remove_number(numbers,name):
if numbers.has_key(name):
del numbers[name]
else:
print name," was not found"
def load_numbers(numbers,filename):
in_file = open(filename,"r")
while true:
in_line = in_file.readline()
if in_line == "":
break
in_line = in_line[:-1]
[name,number] = string.split(in_line,",")
numbers[name] = number
in_file.close()
def save_numbers(numbers,filename):
out_file = open(filename,"w")
for x in numbers.keys():
out_file.write(x+","+numbers[x]+"\n")
out_file.close()
def print_menu():
print '1. Print Phone Numbers'
print '2. Add a Phone Number'
print '3. Remove a Phone Number'
print '4. Lookup a Phone Number'
print '5. Load numbers'
print '6. Save numbers'
print '7. Quit'
print
phone_list = {}
menu_choice = 0
print_menu()
while menu_choice != 7:
menu_choice = input("Type in a number (1-7):")
if menu_choice == 1:
print_numbers(phone_list)
elif menu_choice == 2:
print "Add Name and Number"
name = raw_input("Name:")
phone = raw_input("Number:")
add_number(phone_list,name,phone)
elif menu_choice == 3:
print "Remove Name and Number"
name = raw_input("Name:")
remove_number(phone_list,name)
elif menu_choice == 4:
print "Lookup Number"
name = raw_input("Name:")
print lookup_number(phone_list,name)
elif menu_choice == 5:
filename = raw_input("Filename to load:")
load_numbers(phone_list,filename)
elif menu_choice == 6:
filename = raw_input("Filename to save:")
save_numbers(phone_list,filename)
elif menu_choice == 7:
pass
else:
print_menu()
print "Goodbye"
> python tele2.py 1. Print Phone Numbers 2. Add a Phone Number 3. Remove a Phone Number 4. Lookup a Phone Number 5. Load numbers 6. Save numbers 7. Quit Type in a number (1-7):2 Add Name and Number Name:Jill Number:1234 Type in a number (1-7):2 Add Name and Number Name:Fred Number:4321 Type in a number (1-7):1 Telephone Numbers: Name: Jill Number: 1234 Name: Fred Number: 4321 Type in a number (1-7):6 Filename to save:numbers.txt Type in a number (1-7):7 Goodbye
> python tele2.py 1. Print Phone Numbers 2. Add a Phone Number 3. Remove a Phone Number 4. Lookup a Phone Number 5. Load numbers 6. Save numbers 7. Quit Type in a number (1-7):5 Filename to load:numbers.txt Type in a number (1-7):1 Telephone Numbers: Name: Jill Number: 1234 Name: Fred Number: 4321 Type in a number (1-7):7 Goodbye
Le nuove porzioni del programma sono:
def load_numbers(numbers,filename):
in_file = open(filename,"r")
while 1:
in_line = in_file.readline()
if len(in_line) == 0:
break
in_line = in_line[:-1]
[name,number] = string.split(in_line,",")
numbers[name] = number
in_file.close()
def save_numbers(numbers,filename):
out_file = open(filename,"w")
for x in numbers.keys():
out_file.write(x+","+numbers[x]+"\n")
out_file.close()
Per prima cosa osserviamo la porzione del programma che esegue il
salvataggio. Innanzitutto crea un oggetto file con il comando
open(filename,"w"), dopodiché crea una nuova linea per ognuno
dei numeri di telefono con il comando
out_file.write(x+","+numbers[x]+"\n"). In questo modo scrive
una linea contenente il nome, una virgola ed il numero, seguito da un
'a capo' (newline).
La funzione che effettua il caricamento in memoria è un po' più
complessa. Inizia creando un oggetto file, quindi usa il ciclo
while 1: finché non incontra un'istruzione
break. Successivamente passa alla linea
in_line = in_file.readline(). La funzione readline
ritorna una stringa vuota (len(string) == 0) quando viene raggiunta la
fine del file. L'istruzione if esegue un controllo sul
break e se è il caso, uscirà dal ciclo
while. Naturalmente, se la funzione readline non
restituisse il newline all'estremità della linea, non potremmo
stabilire se è una stringa vuota, una linea vuota o la fine del
file, per questo inseriamo il newline che readline
restituisce, solamente dop lo elimineremo.
La linea in_line = in_line[:-1] elimina l'ultimo carattere
della linea (il newline che farebbe andare a capo la linea). Nelle
restanti istruzioni viene trattata la stringa, dividendola in base
alla virgola, in due parti:
[name,number] = string.split(in_line,","), nome e
numero. Infine il numero viene inserito nel dizionario
numbers.
Modificate il programma dei voti del Capitolo 11 per salvare su di un file la registrazione degli studenti.