La función read () de Python devuelve una cadena vacía

Si escribo esto en Python:

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

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

Cuando llega al final del archivo (EOF), el método .read 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.' 

Doc enlaces: 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í, intente poner file.seek(0) antes de la read .

De la documentación del método file.read() :

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.

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

Hay otro problema, y ​​es que el archivo en sí puede filtrarse y solo ser recuperado tarde o incluso nunca por el recolector de basura. Por lo tanto, use una sentencia with:

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

Esto es difícil de digerir para cualquier persona con un fondo C-ish (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 no es el caso, pero primero debes acostumbrarte a este estilo …