Persistencia de datos de Python: API de archivos

Python usa incorporado input() y print()funciones para realizar operaciones estándar de entrada / salida. La función input () lee bytes de un dispositivo de flujo de entrada estándar, es decir, un teclado.

los print()Por otro lado, la función envía los datos al dispositivo de flujo de salida estándar, es decir, al monitor de visualización. El programa Python interactúa con estos dispositivos IO a través de objetos de flujo estándarstdin y stdout definido en el módulo sys.

los input()La función es en realidad una envoltura del método readline () del objeto sys.stdin. Todas las pulsaciones de teclas del flujo de entrada se reciben hasta que se presiona la tecla 'Enter'.

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

Tenga en cuenta que, readline()dejar un carácter final '\ n'. También hay un método read () que lee datos del flujo de entrada estándar hasta que es terminado porCtrl+D personaje.

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

Similar, print() es una función de conveniencia que emula el método write () del objeto stdout.

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

Al igual que los objetos de flujo predefinidos stdin y stdout, un programa Python puede leer datos y enviar datos a un archivo de disco o un conector de red. También son arroyos. Cualquier objeto que tenga el método read () es un flujo de entrada. Cualquier objeto que tenga el método write () es un flujo de salida. La comunicación con el flujo se establece obteniendo una referencia al objeto del flujo con la función open () incorporada.

función open ()

Esta función incorporada utiliza los siguientes argumentos:

f=open(name, mode, buffering)

El parámetro de nombre, es el nombre del archivo de disco o cadena de bytes, el modo es una cadena de un carácter opcional para especificar el tipo de operación que se realizará (leer, escribir, agregar, etc.) y el parámetro de almacenamiento en búfer es 0, 1 o -1, lo que indica el almacenamiento en búfer está desactivado, activado o predeterminado del sistema.

El modo de apertura de archivos se enumera según la tabla siguiente. El modo predeterminado es 'r'

No Señor Parámetros y descripción
1

R

Abierto para lectura (predeterminado)

2

W

Abrir para escribir, truncando el archivo primero

3

X

Cree un nuevo archivo y ábralo para escribir

4

A

Abierto para escritura, agregando al final del archivo si existe

5

B

Modo binario

6

T

Modo de texto (predeterminado)

7

+

Abra un archivo de disco para actualizarlo (leer y escribir)

Para guardar datos en un archivo, debe abrirse con el modo 'w'.

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

Este objeto de archivo actúa como un flujo de salida y tiene acceso al método write (). El método write () envía una cadena a este objeto y se almacena en el archivo subyacente.

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

Es importante cerrar la secuencia para asegurarse de que los datos que quedan en el búfer se transfieran por completo a ella.

file.close()

Intente abrir 'test.txt' usando cualquier editor de prueba (como el bloc de notas) para confirmar la creación exitosa del archivo.

Para leer el contenido de 'test.txt' mediante programación, debe abrirse en modo 'r'.

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

Este objeto se comporta como un flujo de entrada. Python puede recuperar datos de la transmisión usandoread() método.

string=f.read()
print (string)

El contenido del archivo se muestra en la consola de Python. El objeto Archivo también admitereadline() método que puede leer cadenas hasta que encuentra el carácter EOF.

Sin embargo, si el mismo archivo se abre en modo 'w' para almacenar texto adicional en él, se borran los contenidos anteriores. Siempre que se abre un archivo con permiso de escritura, se trata como si fuera un archivo nuevo. Para agregar datos a un archivo existente, use 'a' para el modo de agregar.

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

El archivo ahora tiene una cadena anterior y recientemente agregada. El objeto de archivo también admitewritelines() método para escribir cada cadena en un objeto de lista en el archivo.

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

Ejemplo

los readlines()El método devuelve una lista de cadenas, cada una de las cuales representa una línea en el archivo. También es posible leer el archivo línea por línea hasta llegar al final del archivo.

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

Salida

Hello TutorialsPoint
Python Tutorials
Java Tutorials
DBMS tutorials
Mobile development tutorials

Modo binario

De forma predeterminada, la operación de lectura / escritura en un objeto de archivo se realiza en datos de cadena de texto. Si queremos manejar archivos de otros tipos diferentes, como medios (mp3), ejecutables (exe), imágenes (jpg), etc., debemos agregar el prefijo 'b' al modo de lectura / escritura.

La siguiente declaración convertirá una cadena en bytes y la escribirá en un archivo.

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

La conversión de la cadena de texto a bytes también es posible usando la función encode ().

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

Necesitamos usar ‘rb’modo para leer archivo binario. El valor devuelto del método read () se decodifica primero antes de imprimir.

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

Para escribir datos enteros en un archivo binario, el objeto entero debe convertirse a bytes por to_bytes() método.

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

Para volver a leer desde un archivo binario, convierta la salida de la función read () a un entero mediante la función from_bytes ().

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

Para datos de coma flotante, necesitamos usar struct módulo de la biblioteca estándar de Python.

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

Desempaquetando la cadena de la función read (), para recuperar los datos flotantes del archivo binario.

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

Lectura / escritura simultánea

Cuando se abre un archivo para escritura (con 'w' o 'a'), no es posible leerlo y viceversa. Si lo hace, se producirá el error UnSupportedOperation. Necesitamos cerrar el archivo antes de realizar otra operación.

Para realizar ambas operaciones simultáneamente, tenemos que agregar el carácter '+' en el parámetro de modo. Por lo tanto, el modo 'w +' o 'r +' permite usar los métodos write () y read () sin cerrar un archivo. El objeto Archivo también admite la función seek () para rebobinar la secuencia a cualquier posición de byte deseada.

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

La siguiente tabla resume todos los métodos disponibles para un archivo como un objeto.

No Señor Método y descripción
1

close()

Cierra el archivo. Un archivo cerrado ya no se puede leer ni escribir.

2

flush()

Vacíe el búfer interno.

3

fileno()

Devuelve el descriptor de archivo entero.

4

next()

Devuelve la siguiente línea del archivo cada vez que se llama. Utilice el iterador next () en Python 3.

5

read([size])

Lee como máximo los bytes de tamaño del archivo (menos si la lectura llega a EOF antes de obtener los bytes de tamaño).

6

readline([size])

Lee una línea completa del archivo. Se mantiene un carácter de nueva línea final en la cadena.

7

readlines([sizehint])

Lee hasta EOF usando readline () y devuelve una lista que contiene las líneas.

8

seek(offset[, whence])

Establece la posición actual del archivo. 0-inicio 1-corriente 2-fin.

9

seek(offset[, whence])

Establece la posición actual del archivo. 0-inicio 1-corriente 2-fin.

10

tell()

Devuelve la posición actual del archivo.

11

truncate([size])

Trunca el tamaño del archivo.

12

write(str)

Escribe una cadena en el archivo. No hay valor de retorno.