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.