2.1.7.9 Objetos fichero

Los objetos fichero se implementan con el paquete C stdio y se pueden crear con la función interna open() descrita en la sección , ``Funciones internas''. También son el resultado de otras funciones y métodos internos, por ejemplo, os.popen() y os.fdopen() y el método makefile() de los objetos socket.

Cuando falla una operación de ficheros por una cuestión de E/S, se lanza la excepción IOError. Esto incluye situaciones donde la operación no esté definida por cualquier motivo, como usar seek() en un dispositivo tty o intentar escribir en un fichero abierto para lectura.

Los ficheros cuentan con los siguientes métodos:

close ()
Cerrar el fichero. No es posible escribir ni leer en un fichero cerrado. Cualquier operación que requiera que el fichero esté abierto lanzará IOError si el fichero se ha cerrado. Está permitido llamar a close() más de una vez.

flush ()
Descarga el tampón interno, como la función C fflush() de stdio. Puede no tener efecto en ciertos objetos similares a los ficheros.

isatty ()
Devuelve verdadero si el fichero está conectado a un dispositivo tty (un terminal interactivo de líneas de orden), en caso contrario, falso. Note: Si un objeto similar a los ficheros no está asociado a un fichero real, no debe implementar este método.

fileno ()
Devuelve el ``descriptor de fichero'' utilizado por la implementación subyacente para solicitar operaciones E/S del sistema operativo. Puede ser útil para interfaces de bajo nivel que utilicen descriptores de ficheros, por ejemplo, el módulo fcntl o os.read() y similares. Nota: Si un objeto similar a los ficheros no tiene un descriptor de fichero, no debe implementar este método.

read ([size])
Lee como mucho size bytes del fichero (menos si se alcanza el final del fichero antes de obtener size bytes). Si el argumento size es negativo o no se proporciona, se leen todos los datos hasta que se acaba el fichero. Los bytes se obtienen como objeto cadena. Se obtiene una cadena vacía si se alcanza el final del fichero inmediatamente (en ciertos ficheros, como los tty, tiene sentido intentar leer tras alcanzar el final del fichero). Este método puede llamar a la función C subyacente fread() más de una vez en sus intentos de recuperar una cantidad de bytes tan cercana a size como sea posible.

readline ([size])
Lee una línea entera del fichero. Se mantiene un carácter de fin de línea en la cadena2.6 (pero puede no aparecer cuando el fichero termine en una línea incompleta). Si se proporciona el argumento size y no es negativo, actúa como tope del número de bytes devueltos (incluyendo el retorno de carro), por lo que podría devolverse una línea incompleta. Se devuelve una cadena vacía al llegar al final del fichero. Nota: A diferencia de la función C fgets() de stdio, la cadena devuelta tendrá caracteres nulos ('\0') si aparecían en el fichero de entrada.

readlines ([sizehint])
Leer hasta el fin de fichero utilizado readline() y devolver una lista de las líneas leídas. Si se proporciona el argumento opcional sizehint, se leen aproximadamente sizehint bytes (probablemente un múltiplo del tamaño del tampón interno). Los objetos que implementen una interfaz de tipo fichero pueden hacer caso omiso de sizehint si no es posible la implementación eficaz.

seek (offset[, whence])
Establece la posición actual del fichero, como la función C fseek() de stdio. El argumento whence es opcional, con un valor predeterminado de 0 (posicionamiento absoluto); otros valores posibles son 1 (posicionamiento relativo a la posición actual) y 2 (posicionamiento relativo al final del fichero). No hay valor de retorno.

tell ()
Devuelve la posición actual del fichero, como la función C ftell() de stdio.

truncate ([size])
Trunca el fichero. Si se proporciona el argumento opcional size, el fichero se trunca a (como mucho) ese tamaño. El tamaño depende de la posición actual. La disponibilidad de esta función depende de la versión del sistema operativo (por ejemplo, no todas las versiones de Unix dan soporte a esta operación).

write (str)
Escribe una cadena en el fichero. No se devuelve ningún valor. Nota: Por los efectos del tamponado, la cadena puede no aparecer en el fichero hasta que se llame a los métodos flush() o close().

writelines (list)
Escribe una lista de cadenas al fichero. No se devuelve ningún valor. El nombre es paralelo a readlines(), writelines() no añade separadores de línea.

Los objetos fichero también ofrecen otros atributos interesantes. No son necesarios para los objetos de interfaz tipo fichero, pero deberían implementarse si tienen sentido en un objeto particular.

closed
Booleano que indica el estado actual del objeto fichero. Es un atributo de sólo lectura, que se cambia mediante el método close(). Puede no estar disponible en todos los objetos con interfaz tipo fichero.

mode
El modo de E/S del fichero. Si se creó el fichero con la función interna open(), será el valor del parámetro mode. Es un atributo de sólo lectura y puede no estar disponible en todos los objetos con interfaz tipo fichero.

name
Si se creó el objeto fichero mediante open(), el nombre del fichero. En caso contrario, alguna cadena que indique el origen del fichero, de la forma "<...>". Es un atributo de sólo lectura y puede no estar disponible en todos los objetos con interfaz tipo fichero.

softspace
Booleano que indica si se debe escribir un espacio antes de escribir otro valor al usar la sentencia print. Las clases que intenten simular un objeto fichero deberían tener un atributo escribible softspace, que debería inicializarse a cero. Esto será automático en la mayoría de las clases implementadas en Python (se debe tener cuidado en las clases que redefinan el acceso a los atributos). Los tipos implementados en C tendrán que proporcionar un atributo softspace escribible. Nota: Este atributo no se usa para controlar la sentencia print, sino para permitir que la implementación de print lleve la cuenta de su estado interno.



Footnotes

... cadena2.6
La ventaja de mantener el fin de línea es que se puede devolver una cadena vacía para indicar el fin de fichero sin ambigüedad. Otra ventaja es que (cuando esto fuera relevante, por ejemplo, si se desea hacer una copia exacta del fichero al tiempo que exploras sus líneas) se sabe si la última línea del fichero termina en retorno de carro o no (sí que ocurre).

Ver Sobre este documento... para obtener información sobre sugerencias.