En un sistema Linux, todo es un archivo. Pero los archivos que solemos decir son imágenes, documentos, datos, programas, etc., que se almacenan en el disco. En la operación de E / S del programa, muchas veces es para leer y escribir archivos desde el disco. En esta sección explicamos cómo los objetos de archivo en Python manipulan archivos.
Crear un objeto de archivo
Un objeto de archivo se puede crear fácilmente con la función incorporada de Python open()
. La función de apertura tiene muchos parámetros, los más comunes son dos. El método más común para usar la función de apertura es: open(filename, mode)
.
f = open('myfile', 'w')
El primer filename
parámetro es una cadena de filename
de filename
, como myfile
. El segundo parámetro es también una cadena que indica cómo se utiliza el archivo. Las opciones para el mode
son las siguientes:
Modo | Significado |
'r' | Abrir en modo de solo lectura (predeterminado) |
'w' | Abra en modo de escritura y borre el contenido del archivo (si el archivo existe) |
'x' | Crea un nuevo archivo y ábrelo en modo de escritura |
'a' | Abrir en modo de escritura, comenzando al final del archivo (si el archivo existe) |
'b' | Modo binario |
't' | Modo de texto (por defecto) |
'+' | Abra un archivo existente para actualizar (leer y escribir) |
La 'b'
y la 't'
son si el contenido del archivo especificado es de texto o binario, y todo lo demás se trata de leer y escribir.
'b'
es un modo binario para abrir el archivo, los datos leídos y escritos son objetos de bytes (bytes), este modo puede leer y escribir todos los archivos, incluidos los archivos de texto, pero preste atención al problema de codificación al leer y escribir archivos de texto.
't'
es un archivo de lectura / escritura en modo texto. Al leer, el terminador de línea específico de la plataforma ( \n
en Unix, \r\n
en Windows) se convierte a \n
forma predeterminada. Escribir es, de forma predeterminada, el \n
generado \n
convierte de nuevo en el terminador específico de la plataforma. Esta "modificación tras bambalinas" predeterminada está bien para los archivos de texto, pero corrompe los datos en archivos de datos binarios (como JPEG o exe).
Cuando se utiliza open
crear objetos de archivo, es mejor usar la palabra clave with
. La ventaja es que el archivo se cerrará correctamente cuando se acabe la palabra, incluso si se lanza una excepción en algún momento. Y with
más corto que el bloque de código try-finally
equivalente:
In [102]: with open('myfile') as f:
...: data = f.read()
...:
In [103]: f.closed
Out[103]: True
Si no usa la palabra clave with
, puede llamar a f.close()
para cerrar el archivo y liberar inmediatamente los recursos del sistema que utiliza. Si no se muestra ningún archivo cerrado, el recolector de basura de Python eventualmente destruirá el objeto y cerrará el archivo abierto por usted, pero el archivo puede permanecer abierto por un tiempo. Otro riesgo es que las diferentes implementaciones de Python se limpien en diferentes momentos.
Después de cerrar el objeto de archivo con la instrucción with o llamando a f.close (), el intento de usar el objeto de archivo fallará automáticamente.
Método de objeto de archivo
Después de crear el objeto de archivo f
mediante el método anterior, podemos leer y escribir datos a través de su método correspondiente.
(1) Escribir contenido en el archivo: f.write (cadena)
La forma de write()
contenido en un archivo es el método write()
, y el objeto que se pasa debe ser una cadena (en modo de texto) o un objeto de byte (en modo binario). Si desea escribir otros tipos de objetos (como diccionarios, listas, etc.), primero conviértalos a una cadena (en modo de texto) o un objeto de byte (en modo binario).
In [109]: f = open('myfile', 'w')
In [110]: f.write('Las personas sordas aprenden Python, que es todo el contenido del archivo.\n')
Out[110]: 21
In [111]: f.close()
(2) Lea el contenido del archivo: f.read (tamaño)
Lee los datos dentro del archivo y los devuelve como una cadena (en modo de texto) o un objeto de byte (modo binario). El parámetro de size
es un parámetro entero opcional. Cuando el size
se omite o es negativo, se lee todo el contenido del archivo. Si el tamaño del archivo es dos veces o más que la memoria de la máquina, puede ocurrir un error.Lee y devuelve el tamaño del contenido. Si se ha leído todo el contenido (al final del archivo), se devolverá una cadena vacía.
In [112]: f = open('myfile')
In [113]: f.read()
Out[113]: 'Aprender Python es el contenido completo de un archivo.\n'
In [114]: f.read()
Out[114]: ''
f.readline()
lee una línea del archivo, el salto de línea \n
f.readline()
final de la cadena;
f.readlines()
lee todas las líneas del archivo y devuelve una lista de cadenas;
In [118]: f.readline()
Out[118]: 'Aprender Python es el contenido completo de un archivo.\n'
In [119]: f.seek(0)
Out[119]: 0
In [120]: f.readlines()
Out[120]: ['Aprender Python es el contenido completo de un archivo.\n']
El desplazamiento de todas las líneas de un archivo también se puede hacer atravesando el objeto de archivo, que es una forma eficiente, rápida y sencilla de almacenar memoria:
In [122]: for line in f:
...: print(line)
...:
Aprender Python es el contenido completo de un archivo.
(3) Ubicación del objeto de archivo <br /> En el ejemplo anterior, hemos leído el final del archivo. Si queremos leerlo desde el principio, debemos llamar a f.seek(0)
para establecer la posición del objeto de archivo al principio del archivo. Este método toma dos argumentos: f.seek(cookie, whence=0)
- Cookie es el desplazamiento de ubicación
- De donde es una posición relativa, tiene tres posiciones relativas:
- 0 al principio del archivo, el desplazamiento es 0 o un entero;
- 1 posición actual, el offset puede ser negativo;
- 2 Al final del archivo, el desplazamiento suele ser un número negativo;
¿Cómo comprobar la ubicación actual? Llame al método f.tell()
.
Resumen
La lectura y escritura de archivos es una operación que a menudo se requiere en la programación. Los contenidos de lectura y escritura en Python 3 se dividen en dos tipos: objeto de cadena y byte, que corresponden al modo de texto y al modo binario de apertura del archivo.
Mi número público: las personas sordas compartirán más experiencia en el aprendizaje de Python , así que estad atentos.
留言
張貼留言