La función Python read () devuelve una cadena vacía [closed]

3 minutos de lectura

avatar de usuario
Francisco R.

Si escribo esto en Python:

open("file","r").read()

a veces devuelve el contenido exacto del archivo como una cadena, otras veces devuelve una cadena vacía (incluso si el archivo no está vacío). ¿Alguien puede explicar de qué depende esto?

  • @Pavel Anossov Lo sé. Lo mismo sucede si hago: f=open(“file”,”r”); f.leer()

    – Francisco R.

    4 de mayo de 2013 a las 12:49


  • @FrancescoR. Entonces el archivo es vacío. De lo contrario, proporcione algún código y contenido de archivo que podamos usar para reproducir su problema.

    – Bakuriu

    4 mayo 2013 a las 12:52

  • Revisé los archivos que había usado y estaban todos vacíos. Perdón mi error

    – Francisco R.

    4 de mayo de 2013 a las 13:03


  • Duplicado de stackoverflow.com/questions/3906137/…

    – triplete

    19 de marzo a las 11:26

avatar de usuario
pradyunsg

Cuando llegue al final del archivo (EOF), el .read el método devuelve ''ya que no hay más datos para leer.

>>> f = open('my_file.txt')
>>> f.read() # you read the entire file
'My File has data.'
>>> f.read() # you've reached the end of the file 
''
>>> f.tell() # give my current position at file
17
>>> f.seek(0) # Go back to the starting position
>>> f.read() # and read the file again
'My File has data.'

Enlaces de documentos: read() tell() seek()

Nota: Si esto sucede la primera vez que lee el archivo, verifique que el archivo no esté vacío. Si no es así, intenta poner file.seek(0) antes de read.

  • Revisé los archivos que había usado y estaban todos vacíos. Perdón mi error

    – Francisco R.

    4 mayo 2013 a las 13:04

Desde el file.read() método documentación:

Se devuelve una cadena vacía cuando se encuentra EOF inmediatamente.

Ha llegado al final del objeto de archivo, no hay más datos para leer. Los archivos mantienen una ‘posición actual’, un puntero a los datos del archivo, que comienza en 0 y se incrementa a medida que lee datos.

Ver el file.tell() método para leer esa posición, y el file.seek() método para cambiarlo

Hay otro problema, y ​​es que el archivo en sí puede filtrarse y el recolector de basura solo lo reclama tarde o incluso nunca. Por lo tanto, use una declaración with:

with open(...) as file:
    data = file.read()

Esto es difícil de digerir para cualquier persona con experiencia en C (C, C ++, Java, C # y probablemente otros) porque la sangría siempre crea un nuevo ámbito y cualquier variable declarada en ese ámbito es inaccesible para el exterior. En Python este simplemente no es el caso, pero primero tienes que acostumbrarte a este estilo…

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad