|  |  |  | La libreria di riferimento di Python |  |  |  | 
 
 
2.3.9 File oggetto
            
I file oggetto vengono implementati utilizzando il package
stdio del C, e possono essere creati con il costruttore built-in 
file() descritto nella sezione
2.1, ``Funzioni built-in''2.10  I file oggetto vengono restituiti anche da 
degli altri metodi e funzioni built-in, come os.popen(), 
os.fdopen() ed il metodo makefile() degli oggetti
socket. 
Quando un'operazione su file fallisce per motivi legati all'I/O,
viene sollevata l'eccezione IOError.  Questo include
situazioni dove l'operazione non viene definita per qualche ragione, 
come un seek() su un dispositivo tty o la scrittura di un file
aperto in sola lettura.
I file hanno i seguenti metodi:
- 
  Chiude il file.  Un file chiuso non può essere più letto o scritto.
  Ogni operazione che richiede l'apertura di quel file solleverà
  un'eccezione del tipo ValueError dopo che il file sarà
  stato chiuso.  È concesso di chiamare più di una volta il metodo
  close(). 
- 
  Svuota il buffer interno, come fflush() di
  stdio.  Questo può essere una no-op su qualche oggetto
  simile a file.
- 
  
  Restituisce l'intero ``descrittore di file'' che viene usato
  dall'implementazione sottostante per la richiesta di operazioni di
  I/O da parte del sistema operativo.  Questo può essere utile per
  altre interfacce di basso livello che usano i descrittori di file,
  come il modulo fcntl o
  os.read() e simili.  Note:
Gli oggetti simili a file che
  non hanno un reale descrittore di file non dovrebbero fornire
  questo metodo! 
- 
  Restituisce Truese il file è connesso ad un dispositivo
  tty(-simile), altrimentiFalse.  Note:
Se un simile a file non è
  associato ad un file reale, questo metodo non dovrebbe essere
  implementato!
- 
Un file oggetto è il suo iteratore personale, per esempio
iter(f)restituisce f (a meno che f non sia
chiuso).  Quando un file viene usato come iteratore, tipicamente in un
ciclo for (per esempio,for line in f: print line),
il metodo next() viene chiamato ripetutamente.  Questo metodo 
restituisce la successiva riga di input, o solleva un'eccezione di
tipo StopIteration quando viene raggiunto l'EOF.  Per
avere un ciclo for più efficiente, che iteri su ogni riga
del file (un'operazione molto comune), il metodo next() usa
un buffer nascosto read-ahead.  Come conseguenza dell'uso di un buffer 
read-ahead, combinando il metodo next() con un altro metodo
per i file (come readline()), l'associazione non funzionerà 
correttamente.  Tuttavia, usando seek() per inserire il file
in una posizione assoluta si riuscirà a svuotare il buffer read-ahead.  
Nuovo nella versione 2.3.
- 
  Legge al più una quantità (size) di byte da un file (di meno
  se viene letto l'EOF prima di ottenere la quantità size di
  byte).  Se l'argomento size è negativo o viene omesso, legge 
  tutti i dati fino a che non viene raggiunto l'EOF.  I byte vengono
  restituiti come un oggetto stringa.  Viene restituita una stringa
  vuota quando l'EOF viene incontrato immediatamente.  (Per certi
  file , come ttys, ha senso continuare la lettura dopo che è stato
  incontrato l'EOF.) 
  Notate che questo metodo può chiamare la funzione C sottostante
  fread() più di una volta, per acquisire più byte ed
  arrivare il più vicino possibile alla dimensione (size).  
  Notate anche che, quando in modo non bloccante, possono
  essere restituiti meno dati di quelli richiesti, se non viene
  passato il parametro size. 
- 
  Legge un'intera riga dal file.  Un codice di controllo di fine riga
  viene catturato nella stringa (ma è assente quando il file finisce 
  con una riga incompleta).2.11  Se l'argomento size è presente e non negativo,
  rappresenta il conteggio massimo dei byte (inclusi i caratteri
  di fine riga) e può restituire una riga incompleta.  Una
  stringa vuota viene restituita solo quando viene trovato
  immediatamente un EOF.  Note:
Diversamente dal metodo
  fgets() di stdio, la stringa restituita
  contiene caratteri nulli ('\0') se vengono incontrati
  nell'input.
- 
  Legge fino a EOF usando readline(), e restituisce una
  lista contenente le righe lette.  Se l'argomento facoltativo
  sizehint è presente, invece di leggere fino a EOF, legge le
  righe intere il cui valore approssimativo ammonta a sizehint
  byte (possibilmente dopo l'arrotondamento superiore alla misura del 
  buffer interno).  Usando l'implementazione di oggetti con
  interfaccia simile a file, si potrà scegliere di ignorare
  sizehint se non può essere implementato, o se non può esserlo
  efficientemente. 
- 
  Questo metodo restituisce le medesime funzionalità di
  iter(f). 
  
Nuovo nella versione 2.1.Deprecato dalla versione 2.3 di Python.
Usate invece "for line in file". 
- 
  Imposta la corrente posizione del file, come fseek() di
  stdio.  L'argomento whence è facoltativo e per
  definizione viene impostato a0(posizionamento assoluto del
  file); altri valori sono1(ricerca relativa alla posizione
  corrente) e2(ricerca relativa alla fine del file).  Non ci
  sono valori restituiti.  Notate che se il file viene aperto in modalità
  appending (NdT: aggiunta) (modo'a'o'a+') tutte le
  operazioni seek() non verranno effettuate alla prossima
  scrittura.  Se il file viene aperto solo in scrittura in modalità 
  append (modo'a'), questo metodo è essenzialmente un no-op, ma
  rimane utile per file aperti in modalità append con la lettura
  abilitata (modo'a+').  Se il file viene aperto in modalità 
  testo (mode't'), solo gli offset restituiti da tell()
  sono ammessi.  L'uso di altri offset causa comportamenti imprevisti.
Notate che non tutti i file oggetto sono soggetti al metodo
  seek(). 
 
- 
  Restituisce la corrente posizione del file, come il metodo
  ftell() di stdio.
- 
  Tronca la dimensione del file.  Se l'agomento facoltativo size
  è presente, il file viene troncato a (al massimo) quella misura.  La 
  misura viene predefinita alla posizione corrente.  La posizione 
  corrente nel file non viene cambiata.  Notate che se la misura 
  specificata eccede la misura del file corrente, il risultato dipende
  dalla piattaforma: risultati possibili includono che il file resti 
  immutato, aumenti fino alla misura specificata come se fosse 
  zero-filled, o incrementi fino alla misura specifica con nuovo 
  contenuto non specificato. 
  Disponibilità: Windows e la maggior parte delle varianti Unix.
- 
  Scrive una stringa nel file.  Non ci sono valori restituiti.  Fino a
  che viene bufferizzata, la stringa non può essere mostrata nel file
  prima che vengano chiamati i metodi flush() o
  close(). 
- 
  Scrive una sequenza di stringhe nel file.  La sequenza può essere
  ogni oggetto iterabile che produce stringhe.  Non ci sono valori
  restituiti.  (Il nome viene inteso per ricercare readlines();
  writelines() non aggiunge separatori di riga.)
File supporta il protocollo iteratore.  Ogni iterazione restituisce lo
stesso risultato di file.readline(), e l'iterazione
finisce quando il metodo readline() restituisce una stringa
vuota. 
I file oggetto possono offrire un numero di altri interessanti
attributi.  Questi non sono richiesti per gli oggetti simile a file, ma
dovrebbero essere implementati se hanno senso per il particolare 
oggetto. 
- closed
- 
Un valore booleano indicante il corrente stato del file oggetto.  Questo
è un attributo in sola lettura; il metodo close() cambia il 
valore.  Può non essere disponibile su tutti gli oggetti simile a file. 
- encoding
- 
La codifica usata dal file.  Quando delle stringhe Unicode
vengono scritte in un file, vengono convertite in stringhe di byte,
usando questa codifica.  In aggiunta, quando il file è connesso ad un
terminale, l'attributo prende la codifica che il terminale usa
abitualmente (questa informazione potrebbe essere sbagliata se
l'utente ha il terminale configurato male).  L'attributo è in sola
lettura e non può essere presente su tutti gli oggetti simile a file.
Potrebbe essere anche None, in quel caso il file userà la
codifica predefinita del sistema per convertire le stringhe Unicode.
Nuovo nella versione 2.3.
 
- mode
- 
Il modo I/O per il file.  Se il file è stato creato usando la funzione
built-in open(), questo sarà il valore del parametro
mode.  Questo è un attributo in sola lettura e può non essere
presente in tutti gli oggetti simile a file.
- name
- 
Se il file oggetto è stato creato usando open(), il nome
del file.  Altrimenti, alcune stringhe che indichino il sorgente del
file oggetto, nella forma "<...>".  Questo è un
attributo in sola lettura e può non essere presente in tutti gli
oggetti simile a file. 
- newlines
- 
Se Python è stato compilato con l'opzione
--with-universal-newlines al momento del
configure (predefinita), questo attributo in
sola lettura esiste, e per i file aperti in modalità di lettura
universal newline (NdT: fine riga), tiene traccia dei tipi di fine
riga incontrati durante la lettura del file.  I valori che possono 
essere presi in considerazione sono 
'\r','\n','\r\n',None(sconosciuto, non vengono più letti i fine riga) o una tupla
contenente tutti i tipi di fine riga visti, per indicare i fine
riga multipli che sono stati trovati.  Per i file che non vengono
letti nel modo universal newline il valore di questi attributi saràNone.
- softspace
- 
Valore booleano che indica se uno spazio necessita di essere stampato
prima di un altro valore quando si usa l'istruzione print.
Le classi che stanno tentando di simulare un file oggetto dovrebbero 
avere anche un attributo softspace scrivibile, che dovrebbe 
essere inizializzato a zero.  Questo sarà automatico per la maggior
parte delle classi implementate in Python (dovrà essere usata una
certa cutela per gli oggetti che sovrascrivono gli attributi di
accesso); i tipi implementati in C dovranno fornire un attributo
softspace scrivibile. 
Note:
Questo attributo non viene usato per controllare l'istruzione
  print, ma permetterà l'implementazione di print
  per tenere traccia del suo stato interno.
Footnotes
- ... built-in''2.10
- file() è nuovo
in Python 2.2.  Il più vecchio built-in open() è un alias per
file().
- ... incompleta).2.11
-  
	Il vantaggio di lasciare il carattere di fine riga è che
	restituisce una stringa vuota, inequivocabile segno della fine
	del file.  È anche utilizzabile (nei casi in cui può
	interessare, per esempio, se voleste fare una copia esatta del
	file mentre ne state analizzando le righe) per avvertire se
	l'ultima riga del file finisce con un carattere di fine riga
	oppure no (sì, questo succede!). 
|  |  |  | La libreria di riferimento di Python |  |  |  | 
Release 2.3.4, documentation updated on 21. maggio 2005.
 
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.