Lectura y escritura de archivos de aprendizaje de Python

Leer y escribir archivos es la operación de E / S más común. Python tiene funciones integradas para leer y escribir archivos, y su uso es compatible con C.

Antes de leer y escribir archivos, primero debemos entender que la función de leer y escribir archivos en el disco la proporciona el sistema operativo. Los sistemas operativos modernos no permiten que los programas ordinarios manipulen directamente el disco . Por lo tanto, leer y escribir archivos es solicitar al sistema operativo que abra un objeto de archivo (generalmente llamado descriptor de archivo) y luego leer los datos de este objeto de archivo a través del interfaz proporcionada por el sistema operativo (archivo de lectura), o escribir datos en este objeto de archivo (archivo de escritura).

Leer archivo

Para abrir un objeto de archivo en el modo de lectura de un archivo, use la función open () incorporada de Python, pasando el nombre y el identificador del archivo: (simple, aprendiendo programación en entorno Unix)

>>>f = open('/Users/michael/test.txt', 'r')

El identificador 'r' significa leer, de esta forma hemos abierto un archivo con éxito.

Si el archivo no existe, la función open () arrojará un error IOError y dará un código de error e información detallada para indicarle que el archivo no existe:

>>> f=open('/Users/michael/notfound.txt', 'r')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'

Si el archivo se abre correctamente, llame al método read () para leer todo el contenido del archivo de una vez. Python lee el contenido en la memoria, que está representada por un objeto str:

>>> f.read()
'Hello, world!'

El último paso es llamar al método close () para cerrar el archivo **. El archivo debe cerrarse después de su uso **, porque el objeto de archivo ocupará los recursos del sistema operativo, y la cantidad de archivos que el sistema operativo puede abrir al mismo tiempo también es limitada:
Debe estar cerrado, tener una comprensión profunda, no hay mucho que decir.

>>> f.close()

Dado que IOError puede ocurrir durante la lectura y escritura de archivos, una vez que ocurre un error, no se llamará al siguiente f.close (). Por lo tanto, para asegurarnos de que el archivo se pueda cerrar correctamente independientemente de si hay un error , podemos usar try ... finalmente para lograr:

try:
	f = open('/path/to/file', 'r')
	print(f.read())
finally:
	if f:
		f.close()

Pero es demasiado engorroso ser tan realista cada vez (no es de extrañar que la pereza sea la escalera del progreso humano), por lo que Python introdujo la declaración with para ayudarnos automáticamente a llamar al método close ():

with open('/path/to/file', 'r') as f:
	print(f.read())

Esto es lo mismo que el intento anterior ... finalmente, pero el código es más conciso y no hay necesidad de llamar al método f.close ().

Llamar a read () leerá todo el contenido del archivo a la vez . Si el archivo tiene 10G, la memoria explotará. Por lo tanto, para estar seguro, puede llamar al método read (tamaño) repetidamente y leer como máximo tamaño bytes de contenido cada vez . Además, llame a readline () para leer una línea a la vez , llame a readlines () para leer todo el contenido a la vez y devolver la lista línea por línea . Por tanto, es necesario decidir cómo llamar.

Si el archivo es pequeño, read () es la lectura única más conveniente; si no se puede determinar el tamaño del archivo, es más seguro llamar a read (size) repetidamente; si es un archivo de configuración, es más conveniente llamar readlines ():

for line in f.readlines():
    print(line.strip()) # 把末尾的'\n'删掉

Objeto similar a un archivo

Los objetos con un método read () devuelto por la función open () se denominan colectivamente objetos similares a archivos en Python. Además del archivo, también puede ser un flujo de bytes de memoria, un flujo de red, un flujo personalizado, etc. El objeto tipo archivo no requiere la herencia de una clase específica, solo escribe un método read ().

StringIO es un objeto similar a un archivo creado en la memoria y a menudo se usa como un búfer temporal.

archivo binario

Los valores predeterminados mencionados anteriormente son para leer archivos de texto y son archivos de texto codificados en UTF-8. Para leer archivos binarios, como imágenes, videos, etc., simplemente abra el archivo en modo 'rb':

>>> f = open('/Users/michael/test.jpg', 'rb')
>>> f.read()
b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制表示的字节

Codificación de caracteres

Para leer un archivo de texto no codificado en UTF-8, debes pasar el parámetro de codificación a la función open (). Por ejemplo, para leer un archivo codificado en GBK:

>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk')
>>> f.read()
'测试'

Cuando encuentre algunos archivos con codificación no estándar, puede encontrar UnicodeDecodeError , porque algunos caracteres codificados ilegalmente pueden mezclarse en el archivo de texto. En este caso, la función open () también recibe un parámetro de errores, que indica qué hacer si encuentra un error de codificación. La forma más sencilla es simplemente ignorar:

>>> f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')

Escribir archivo

Escribir un archivo es lo mismo que leer un archivo. La única diferencia es que cuando se llama a la función open (), se pasa el identificador 'w' o 'wb' para indicar que se está escribiendo un archivo de texto o un archivo binario:

>>> f = open('/Users/michael/test.txt', 'w')
>>> f.write('Hello, world!')
>>> f.close()

Puede llamar a write () repetidamente para escribir en el archivo, pero debe llamar a f.close () para cerrar el archivo. Cuando escribimos un archivo, el sistema operativo a menudo no escribe los datos en el disco inmediatamente, sino que los coloca en la memoria caché y luego los escribe lentamente cuando está libre. Solo cuando se llama al método close (), el sistema operativo garantiza que todos los datos no escritos se escriben en el disco. La consecuencia de olvidar llamar a close () es que solo una parte de los datos puede escribirse en el disco y el resto se pierde. Por lo tanto, aún use la declaración with para obtener un seguro :

with  open('/Users/michael/test.txt', 'w') as f:
	f.write('Hello, world!')

Para escribir un archivo de texto con una codificación específica, pase el parámetro de codificación a la función open () para convertir automáticamente la cadena a la codificación especificada.

Los zapatos de los niños cuidadosos encontrarán que al escribir un archivo en modo 'w', si el archivo ya existe, se sobrescribirá directamente (equivalente a escribir un nuevo archivo después de eliminarlo). ¿Qué pasa si queremos agregar al final del archivo? Puede pasar in 'a' para escribir en modo adjuntar.

Supongo que te gusta

Origin blog.csdn.net/qq_44787943/article/details/112571845
Recomendado
Clasificación