Notas de estudio de Python (13) --- (serialización de objetos IO) orientado a objetos

Tabla de contenido

Orientado a objetos---Capítulo 11 Serialización de objetos IO

1. flujo IO (flujo IO)

2. método abierto()

3. Método de escritura: escribir()

4. Serialización de objetos


Orientado a objetos---Capítulo 11 Serialización de objetos IO

1. flujo IO (flujo IO)

(1) Descripción general: almacene archivos localmente para formar una capacidad persistente para leer y escribir datos

(2) yo

  • Flujo IO: flujo de entrada y salida, que se refiere a una tecnología para leer datos en la memoria y sacarlos de la memoria.
  • Rol: conservar los datos para garantizar que los datos ya no se pierdan

(3) Clasificación de corrientes :

  • Flujo de bytes (b): Procesamiento de bytes, todos los datos se pueden manipular, como: audio, imagen, archivo ejecutable, flujo de bytes Cuando se manejan datos grandes, no se recomienda leerlos al mismo tiempo
  • Flujo de caracteres (t): los caracteres solo funcionan con datos de caracteres UTF-8, por lo general, no es necesario considerar el problema del espacio de almacenamiento insuficiente (500w palabras-10 MB)

2. método abierto()

(1) Proceso:

(2) tampón (tampón)

1) El búfer es una parte de la memoria, y un cierto espacio de almacenamiento está reservado en la memoria, que se utiliza para la entrada o salida del búfer.

La necesidad de utilizar el búfer: dado que la velocidad de E/S de la memoria es mucho mayor que la velocidad de E/S de los periféricos, la lectura y escritura síncronas harán que la memoria espere mucho tiempo, perdiendo rendimiento; puede causar desbordamiento o inundación de datos

2) Clasificación del tampón:

  • Almacenamiento en búfer completo : la operación de transmisión real solo se realizará cuando se llene el búfer estándar de E / S. Los archivos en el disco duro utilizan el almacenamiento en búfer completo de forma predeterminada.
  • Almacenamiento en búfer de línea : cuando la entrada y la salida encuentren un carácter de nueva línea, se almacenará en búfer
  • Sin almacenamiento en búfer : el usuario no proporciona almacenamiento en búfer e inmediatamente lee y escribe el flujo de datos

(3) Formato : f = abierto (nombre de archivo, modo, codificación)

  • El valor de retorno del método open() es un objeto de archivo, que se puede asignar a una variable (identificador de archivo)
  • filename : el nombre del archivo, que es una cadena, incluida la ruta
  • codificación : formato de codificación, generalmente utf-8
  • modo : la forma de abrir el archivo

(4) modo b

1) Descripción general: modo binario: generalmente se usa para leer archivos binarios como imágenes y videos

PD: el modo b es para leer archivos en tipo de byte, el objeto de byte devuelto no es una cadena, se debe especificar el formato de codificación y se debe garantizar que el tipo de entrada sea de tipo byte

ejemplo:

s = 'this is a test'
b = bytes(s, encoding='utf-8')
f = open('test.txt', 'wb')
f.write(b)
f.close()
# 打开方式为wb,写入s串会报错

(5) + modo:

  • Para el modo w+, los datos originales se borrarán antes y después de leer y escribir, se recomienda no utilizar
  • Para el modo a+, solo se escribirá al final del archivo para siempre, lo que tiene limitaciones y no se recomienda
  • Para el modo r+, es decir, el modo combinado de lectura y escritura, coopere con los métodos seek() y tell() para lograr más operaciones

(6) Operaciones sobre objetos de archivo:

  • leer (tamaño): lee datos de un tamaño determinado y luego los devuelve como una cadena o un objeto de byte, el tamaño es un parámetro opcional, se usa para especificar el flujo de datos para leer, el tamaño se ignora o es negativo, lo que indica que todo el contenido del el archivo se leerá buscar y devolver
f = open('test.txt', 'r')
str1 = f.read(7)
print(str1)
f.close()
# 若文件体积较大,可以分多次读取,使用read(512)方法一点点读取
  • readline(): lea una o más líneas del archivo, cambie la línea a \n y devuelva una cadena vacía si se lee la última línea, se usa para leer una línea y procesar una línea sin volver atrás
f = open('test.txt', 'r')
str1 = f.readline()
print(str1)
f.close()
  • readlines(): Lea todas las líneas del archivo, línea por línea, en varias listas, guárdelas en la lista en orden y devuelva una lista
f = open('test.txt', 'r')
str1 = f.readlines()
print(str1)
f.close()
# ['this is a test']

(7) Archivos transversales

  • De hecho, puede usar el objeto de archivo como un iterador
f = open('test.txt', 'r')
for i in f:
    print(i,end=' ')
f.close()
# this is a test

Resumen: existen varios métodos diferentes para leer archivos. Si el tamaño del archivo es pequeño, es más conveniente usar read() para leerlo de una sola vez. Si no está seguro del tamaño del archivo, puede usar read(size) para prueba repetidamente Si es un archivo de configuración, puede usar readlines () Más conveniente o para el recorrido del bucle

3. Método de escritura: escribir()

  • Rol: escribir datos de cadena o byte en un archivo
  • Las múltiples operaciones de write() en realidad se completan en la memoria y no se escribirán en el disco inmediatamente. Solo después de close(), la operación se sincroniza con el disco.
  • Formato: archivo object.write('contenido')

(1) tell (): devuelve la posición del puntero de lectura y escritura del archivo, la cantidad de bytes contados desde el comienzo del archivo

(2) seek(): Mover varios caracteres a la posición especificada, como: seek(x,1) significa mover x caracteres hacia atrás desde la posición actual. seek(-x,2) avanza desde el final

f = open('test.txt', 'rb+')
f.write(b'123456789')
f.tell()

print(f.seek(2,2))
print(f.seek(3,1))
f.close()
# (x,数字),数字有0,1,2, 0表示从文件开头算起,1表示从文件读写指针的位置来时算起,2表示从文件的结尾算起,默认为0 

(3) cerrar (): cierre el objeto de archivo. Después de procesar un archivo, cierre el archivo y libere el recurso. Si intenta leer y escribir nuevamente, se lanzará una excepción. Si olvida llamar a cerrar (), el El resultado puede ser que los datos solo se escriban parcialmente, el resto de los datos se perderán.

4. Serialización de objetos

(1) ¿Qué es la serialización de objetos?

El proceso de transformar el concepto abstracto de objetos tales como contenedores en datos reales de bytes o caracteres almacenados.

(2) Causas:

  • Fácil de almacenar : la esencia de la serialización es convertir información de texto en un flujo de datos binarios, los datos se ejecutan en python. Tales como: secuencia, tupla de cadena, etc. Si desea guardarlo permanentemente para uso futuro, debe serializarlo.
  • Facilidad de transmisión : cuando dos procesos se comunican a larga distancia, pueden enviarse varios tipos de datos entre sí. No importa qué tipo de datos, se transmitirán en secuencia binaria, y el receptor los deserializará después de recibirlos, y convertirlo en un personaje que pueda ser reconocido.Los conjuntos se restauran como objetos.

(3) módulo de salmuera

  • Función: a través de la operación de serialización del módulo pickle, la información del objeto en ejecución se puede almacenar en un archivo y guardarse de forma permanente, y el objeto se puede recuperar del archivo a través de la operación de deserialización pickle
  • Métodos comunes: dump dumps load loads

# dumps 序列化为字节数据
import pickle
list1 = [10, 20, 30, 40, 50]
data1 = pickle.dumps(list1)
print(data1)
# b'\x80\x04\x95\x0f\x00\x00\x00\x00\x00\x00\x00]\x94(K\nK\x14K\x1eK(K2e.'
f = open('test2.txt', 'wb')
f.write(data1)
f.close()  
# loads 进行反序列化
import pickle
f = open('test2.txt', 'rb')
show = f.read()
show = pickle.loads(show)
print(show)
f.close()
# [10, 20, 30, 40, 50]

Ejemplo: serialice y almacene cadenas en test3.txt, y deserialice la salida después de leer

# dump
import pickle

str1 = ['china', 'world', 'hello', '1234567']
pickle.dump(str1, open('test3.txt', 'wb'))
f = open('test3.txt', 'rb')
print(f.read())
f.close()

# load
str2 = pickle.load(open('test3.txt', 'rb'))
print(str2)

(4) módulo json

  • Función: el módulo json convierte el número de serie del objeto en datos de caracteres, el método es el mismo que el anterior.

PD: json generalmente se usa para procesar datos de tipo diccionario

import json
data1 = {'username': '杨勇', 'age': '17', 'number': '33'}
print(json.dumps(data1))
data2 = json.dumps(data1)
f = open('test4.txt', 'wt')
f.write(data2)
f.close()
# {"username": "\u6768\u52c7", "age": "17", "number": "33"}
# PS:注意文件打开方式为wt,字符形式

Supongo que te gusta

Origin blog.csdn.net/weixin_62443409/article/details/128262777
Recomendado
Clasificación