¿Leer solo la primera línea de un archivo?

6 minutos de lectura

avatar de usuario
arpista

¿Cómo obtendría solo la primera línea de un archivo como una cadena con Python?

  • Si ya ha leído el archivo (“Después de leer en un archivo”), ¡ya ha leído la primera línea! (Suponiendo que haya al menos una línea).

    – William Pursell

    15 de diciembre de 2009 a las 2:50

  • Tenga en cuenta que la pregunta como ahora está redactado tiene un significado diferente al que tenía originalmente. Algunas respuestas ahora parecen tontas ya que tomaron en cuenta la parte “después de leer en un archivo” (que se eliminó).

    –Peter Hansen

    3 de agosto de 2016 a las 12:42

avatar de usuario
Torvalamo

Utilizar el .readline() método (Documentos de Python 2, Documentos de Python 3):

with open('myfile.txt') as f:
    first_line = f.readline()

Algunas notas:

  1. Como se indica en los documentos, a menos que sea la única línea en el archivo, la cadena devuelta de f.readline() contendrá una nueva línea final. Es posible que desee utilizar f.readline().strip() en lugar de eliminar la nueva línea.
  2. los with La declaración cierra automáticamente el archivo nuevamente cuando finaliza el bloque.
  3. los with declaración solo funciona en Python 2.5 y superior, y en Python 2.5 necesita usar from __future__ import with_statement
  4. En Python 3, debe especificar la codificación del archivo para el archivo que abre. Lee mas…

  • En Python 3, si el archivo es ascii o utf8, no tiene que especificar la codificación del archivo. Y si no es así, debe especificar la codificación en codecs.open en Python 2 de todos modos.

    – Evpok

    19 de julio de 2012 a las 12:15

  • @Evpok “En Python 3, si el archivo es ascii o utf8, no es necesario especificar la codificación del archivo” ¡Ojalá fuera estrictamente cierto! La realidad es un poco más desordenada; como se indica en los documentos, la codificación predeterminada utilizada depende de la plataforma (y puede diferir incluso en la misma computadora dependiendo de cómo inicie Python; por ejemplo, he visto un código que funcionó en mi shell normal asumiendo que UTF-8 explota más tarde) cuando se ejecuta a través de Apache con mod_wsgi).

    –Mark Amery

    23/10/2016 a las 22:49


  • Probablemente quieras first_line = f.readline().strip() ya que la línea incluirá el carácter de salto de línea si hay más de una línea en el archivo

    – Mugen

    12 ene a las 10:40

infile = open('filename.txt', 'r')
firstLine = infile.readline()

  • No estás cerrando el archivo. La solución con with es mejor.

    – llamar

    21 de diciembre de 2015 a las 18:43

fline=open("myfile").readline().rstrip()

  • Vine aquí buscando esto. Especialmente desde rstrip() elimina el carácter de nueva línea.

    –Shashank Sawant

    27 de octubre de 2014 a las 9:19

  • -1; esto no cierra el archivo y devuelve un resultado incorrecto si la primera línea contiene algún espacio en blanco al final además del propio carácter de nueva línea.

    –Mark Amery

    23/10/2016 a las 22:51

  • @MarkAmery: en realidad, debido a que el identificador del archivo no está asignado a una variable, se recolecta la basura de inmediato, lo que cierra el archivo. (Aunque, por supuesto, la solución aceptada que utiliza un administrador de contexto sigue siendo mucho mejor).

    – acdr

    19 de enero de 2018 a las 9:07

  • @acdr Lo que dice es cierto para CPython pero no para otras implementaciones de Python; consulte, por ejemplo, el Documentos de recolección de basura de PyPy que mencionan como particular punto de interés que “los archivos… no se cierran rápidamente cuando quedan fuera de alcance”. Por esta razón, generalmente se argumenta (por ejemplo, en stackoverflow.com/a/7396043/1709587) que confiar en el comportamiento que describe es una mala práctica.

    –Mark Amery

    25 de enero de 2018 a las 11:57

avatar de usuario
dan-gph

Para volver al principio de un archivo abierto y luego volver a la primera línea, haga lo siguiente:

my_file.seek(0)
first_line = my_file.readline()

first_line = next(open(filename))

  • ¿Esto también cierra el archivo?

    – abatir

    18 de noviembre de 2016 a las 7:24

  • Eventualmente, cuando Python deja el bloque.

    – vy32

    20 sep 2018 a las 18:41

avatar de usuario
Jarret Hardie

Esto debería hacerlo:

f = open('myfile.txt')
first = f.readline()

  • ¿Esto también cierra el archivo?

    – abatir

    18 de noviembre de 2016 a las 7:24

  • Eventualmente, cuando Python deja el bloque.

    – vy32

    20 sep 2018 a las 18:41

Muchas otras respuestas aquí, pero para responder precisamente la pregunta que hizo (antes de que @MarkAmery editara la pregunta original y cambiara el significado):

>>> f = open('myfile.txt')
>>> data = f.read()
>>> # I'm assuming you had the above before asking the question
>>> first_line = data.split('\n', 1)[0]

En otras palabras, si ya leyó el archivo (como dijo) y tiene un gran bloque de datos en la memoria, para obtener la primera línea de manera eficiente, haga una división () en el carácter de nueva línea, una vez solamente, y tome el primer elemento de la lista resultante.

Tenga en cuenta que esto no incluye el \n carácter al final de la línea, pero supongo que no lo quiere de todos modos (y un archivo de una sola línea puede que ni siquiera tenga uno). También tenga en cuenta que, aunque es bastante corto y rápido, hace una copia de los datos, por lo que para una cantidad de memoria realmente grande, es posible que no lo considere “eficiente”. Como siempre, depende…

  • Si se trata de un archivo grande, f.read() intentará cargar todo el archivo en la memoria, lo que no sería una buena idea. Una alternativa sería leer un carácter a la vez hasta que se encuentre una nueva línea o EOF

    – pensamiento aleatorio

    15 de diciembre de 2009 a las 3:04

  • En realidad, todas las otras respuestas son mejores alternativas que esa. Normalmente, leer un archivo con readline() y amigos cargaría bloques completos a la vez, tal vez 32K más o menos, y buscaría para encontrar la siguiente nueva línea. Mucho más rápido y eficiente. Mi respuesta sería útil solo si él es ya cargando todo, en cuyo caso podemos asumir que está de acuerdo con tenerlo todo en la memoria.

    –Peter Hansen

    15 de diciembre de 2009 a las 3:23

  • No estoy convencido de haber cambiado el significado. No tiene mucho sentido preguntar cómo “leer” la primera línea de un archivo después de “leer” todo el archivo. Como tal, es bastante obvio para mí que la intención del autor de la pregunta era no asumir que .read() debe ser llamado primero.

    –Mark Amery

    17/10/2016 a las 20:18


  • @MarkAmery, la pregunta estaba mal redactada (“bastante sin sentido”), por lo que adivinó la intención (“obvia para mí”) y la reformuló para que coincidiera. Mi interpretación difiere. Claramente hasta ya menos que harpalss aclare, todo lo que tenemos es la redacción original más su aceptación de una respuesta (es decir, “buscar (0)”) que para mí muestra claramente que él tenido ya leído en el archivo, al menos más allá de la primera línea.

    –Peter Hansen

    17/10/2016 a las 21:45

  • @thang, de verdad, estamos perdiendo el tiempo de todos los que siguen leyendo. Aplicó un voto negativo, eso es todo lo que realmente necesita hacer. En cuanto a “interpretado de cualquier manera”, sí, podría serlo, por lo que no me equivoqué al ofrecer una respuesta que eligió una interpretación válida, incluso si probablemente no fuera la mejor. Finalmente, sí, si todos los datos se leyeron por otras razones, pero todavía quería solo la primera línea (y era un programador novato), podría hacer esta pregunta y encontrar útil mi respuesta. Por favor, déjalo así… nadie se confundirá.

    –Peter Hansen

    31 mayo 2017 a las 16:40

¿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