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?
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?
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 deread
.
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…
@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