Python Data Persistence - File API

Python usa built-in input() e print()funzioni per eseguire operazioni di input / output standard. La funzione input () legge i byte da un dispositivo di flusso di input standard, ad esempio la tastiera.

Il print()la funzione invece, invia i dati verso un dispositivo di flusso di output standard, ovvero il monitor di visualizzazione. Il programma Python interagisce con questi dispositivi IO tramite oggetti stream standardstdin e stdout definito nel modulo sys.

Il input()funzione è in realtà un wrapper intorno al metodo readline () dell'oggetto sys.stdin. Tutte le sequenze di tasti dal flusso di input vengono ricevute fino a quando non viene premuto il tasto "Invio".

>>> import sys
>>> x=sys.stdin.readline()
Welcome to TutorialsPoint
>>> x
'Welcome to TutorialsPoint\n'

Nota che, readline()funzione lascia un carattere finale "\ n". Esiste anche un metodo read () che legge i dati dal flusso di input standard fino a quando non viene terminato daCtrl+D personaggio.

>>> x=sys.stdin.read()
Hello
Welcome to TutorialsPoint
>>> x
'Hello\nWelcome to TutorialsPoint\n'

Allo stesso modo, print() è una comoda funzione che emula il metodo write () dell'oggetto stdout.

>>> x='Welcome to TutorialsPoint\n'
>>> sys.stdout.write(x)
Welcome to TutorialsPoint
26

Proprio come gli oggetti stream predefiniti stdin e stdout, un programma Python può leggere i dati e inviarli a un file su disco oa un socket di rete. Sono anche flussi. Qualsiasi oggetto che ha il metodo read () è un flusso di input. Qualsiasi oggetto che ha il metodo write () è un flusso di output. La comunicazione con lo stream viene stabilita ottenendo il riferimento all'oggetto stream con la funzione open () incorporata.

funzione open ()

Questa funzione incorporata utilizza i seguenti argomenti:

f=open(name, mode, buffering)

Il parametro name, è il nome del file su disco o della stringa di byte, la modalità è una stringa di un carattere opzionale per specificare il tipo di operazione da eseguire (lettura, scrittura, aggiunta ecc.) E il parametro di buffering è 0, 1 o -1 che indica il buffering è disattivato, attivato o predefinito di sistema.

La modalità di apertura dei file è enumerata come da tabella sottostante. La modalità predefinita è "r"

Suor n Parametri e descrizione
1

R

Aperto per la lettura (impostazione predefinita)

2

W

Aperto per la scrittura, troncando prima il file

3

X

Crea un nuovo file e aprilo per la scrittura

4

A

Aperto in scrittura, da aggiungere alla fine del file se esiste

5

B

Modalità binaria

6

T

Modalità testo (predefinita)

7

+

Apri un file su disco per l'aggiornamento (lettura e scrittura)

Per salvare i dati su file, è necessario aprirlo con la modalità "w".

f=open('test.txt','w')

Questo oggetto file funge da flusso di output e ha accesso al metodo write (). Il metodo write () invia una stringa a questo oggetto e viene memorizzato nel file sottostante.

string="Hello TutorialsPoint\n"
f.write(string)

È importante chiudere il flusso, per garantire che tutti i dati rimasti nel buffer siano completamente trasferiti ad esso.

file.close()

Prova ad aprire "test.txt" utilizzando qualsiasi editor di test (come il blocco note) per confermare la corretta creazione del file.

Per leggere il contenuto di "test.txt" a livello di codice, è necessario aprirlo in modalità "r".

f=open('test.txt','r')

Questo oggetto si comporta come un flusso di input. Python può recuperare i dati dal flusso usandoread() metodo.

string=f.read()
print (string)

Il contenuto del file viene visualizzato sulla console Python. L'oggetto File supporta anchereadline() metodo che è in grado di leggere la stringa finché non incontra il carattere EOF.

Tuttavia, se lo stesso file viene aperto in modalità "w" per memorizzare testo aggiuntivo al suo interno, i contenuti precedenti vengono cancellati. Ogni volta che un file viene aperto con il permesso di scrittura, viene trattato come se fosse un nuovo file. Per aggiungere dati a un file esistente, utilizzare "a" per la modalità di aggiunta.

f=open('test.txt','a')
f.write('Python Tutorials\n')

Il file ora ha una stringa aggiunta sia precedente che di recente. L'oggetto file supporta anchewritelines() metodo per scrivere ogni stringa in un oggetto elenco nel file.

f=open('test.txt','a')
lines=['Java Tutorials\n', 'DBMS tutorials\n', 'Mobile development tutorials\n']
f.writelines(lines)
f.close()

Esempio

Il readlines()restituisce un elenco di stringhe, ciascuna delle quali rappresenta una riga nel file. È anche possibile leggere il file riga per riga fino alla fine del file.

f=open('test.txt','r')
while True:
   line=f.readline()
   if line=='' : break
   print (line, end='')
f.close()

Produzione

Hello TutorialsPoint
Python Tutorials
Java Tutorials
DBMS tutorials
Mobile development tutorials

Modalità binaria

Per impostazione predefinita, le operazioni di lettura / scrittura su un oggetto file vengono eseguite sui dati della stringa di testo. Se vogliamo gestire file di diversi altri tipi come media (mp3), eseguibili (exe), immagini (jpg) ecc., Dobbiamo aggiungere il prefisso "b" per la modalità di lettura / scrittura.

La seguente istruzione convertirà una stringa in byte e la scriverà in un file.

f=open('test.bin', 'wb')
data=b"Hello World"
f.write(data)
f.close()

La conversione della stringa di testo in byte è possibile anche utilizzando la funzione encode ().

data="Hello World".encode('utf-8')

Dobbiamo usare ‘rb’modalità per leggere il file binario. Il valore restituito del metodo read () viene prima decodificato prima della stampa.

f=open('test.bin', 'rb')
data=f.read()
print (data.decode(encoding='utf-8'))

Per scrivere dati interi in un file binario, l'oggetto intero deve essere convertito in byte da to_bytes() metodo.

n=25
n.to_bytes(8,'big')
f=open('test.bin', 'wb')
data=n.to_bytes(8,'big')
f.write(data)

Per rileggere da un file binario, converti l'output della funzione read () in intero dalla funzione from_bytes ().

f=open('test.bin', 'rb')
data=f.read()
n=int.from_bytes(data, 'big')
print (n)

Per i dati in virgola mobile, dobbiamo usare struct modulo dalla libreria standard di Python.

import struct
x=23.50
data=struct.pack('f',x)
f=open('test.bin', 'wb')
f.write(data)

Decomprimere la stringa dalla funzione read (), per recuperare i dati float dal file binario.

f=open('test.bin', 'rb')
data=f.read()
x=struct.unpack('f', data)
print (x)

Lettura / scrittura simultanea

Quando un file viene aperto in scrittura (con 'w' o 'a'), non è possibile leggerlo e viceversa. In questo modo viene generato l'errore UnSupportedOperation. Dobbiamo chiudere il file prima di eseguire altre operazioni.

Per eseguire entrambe le operazioni contemporaneamente, dobbiamo aggiungere il carattere '+' nel parametro mode. Quindi, la modalità 'w +' o 'r +' abilita l'uso dei metodi write () e read () senza chiudere un file. L'oggetto File supporta anche la funzione seek () per riavvolgere il flusso in qualsiasi posizione di byte desiderata.

f=open('test.txt','w+')
f.write('Hello world')
f.seek(0,0)
data=f.read()
print (data)
f.close()

La tabella seguente riassume tutti i metodi disponibili per un oggetto simile a un file.

Suor n Metodo e descrizione
1

close()

Chiude il file. Un file chiuso non può più essere letto o scritto.

2

flush()

Lavare il tampone interno.

3

fileno()

Restituisce il descrittore di file intero.

4

next()

Restituisce la riga successiva dal file ogni volta che viene chiamato. Usa l'iteratore next () in Python 3.

5

read([size])

Legge al massimo i byte di dimensione dal file (meno se la lettura raggiunge EOF prima di ottenere byte di dimensione).

6

readline([size])

Legge un'intera riga dal file. Nella stringa viene mantenuto un carattere di nuova riga finale.

7

readlines([sizehint])

Legge fino a EOF utilizzando readline () e restituisce un elenco contenente le righe.

8

seek(offset[, whence])

Imposta la posizione corrente del file. 0-inizio 1-corrente 2-fine.

9

seek(offset[, whence])

Imposta la posizione corrente del file. 0-inizio 1-corrente 2-fine.

10

tell()

Restituisce la posizione corrente del file

11

truncate([size])

Tronca la dimensione del file.

12

write(str)

Scrive una stringa nel file. Non esiste alcun valore di ritorno.