2009-12-15 11 views
122

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

+2

Si ya ha leído el archivo ("Después de la lectura en un archivo "), ¡ya has leído la primera línea! (Suponiendo que hay al menos una línea.) –

+1

Tenga en cuenta que la pregunta * como está redactada ahora * tiene un significado diferente de lo que originalmente lo hizo. Algunas respuestas ahora parecen tontas ya que tuvieron en cuenta la parte "después de leer en un archivo" (que se ha eliminado). –

Respuesta

6

Esto debe hacerlo:

f = open('myfile.txt') 
first = f.readline() 
16
infile = open('filename.txt', 'r') 
firstLine = infile.readline() 
+8

No está cerrando el archivo. La [solución con 'con'] (http://stackoverflow.com/a/1904455/855050) es mejor. – becko

210

Utilice la .readline() método (Python 2 docs, Python 3 docs):

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

Algunas notas:

  1. Como se señaló en los documentos , a menos que sea el único línea en el archivo, la cadena devuelta desde f.readline() contendrá una nueva línea final. Es posible que desee utilizar f.readline().strip() en su lugar para eliminar la nueva línea.
  2. La declaración with cierra automáticamente el archivo cuando termina el bloque.
  3. La declaración with sólo funciona en Python 2.5 y posteriores, y en Python 2.5 es necesario utilizar from __future__ import with_statement
  4. En Python 3 que debe especificar la codificación de archivo para el archivo se abre. Read more...
+3

En Python 3 si el archivo es ascii o utf8 no es necesario que especifique la codificación del archivo. Y si no lo es, debe especificar la codificación a codecs.open en Python 2 de todos modos. – Evpok

+0

@Evpok * "En Python 3 si el archivo es ascii o utf8 no es necesario especificar la codificación del archivo" * - ¡si eso fuera estrictamente cierto!La realidad es un poco más desordenada; como se menciona 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 código que funcionaba en mi caparazón normal al asumir que UTF-8 explotaría más tarde) cuando se ejecuta a través de Apache con 'mod_wsgi'). –

10
fline=open("myfile").readline().rstrip() 
+0

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

+3

-1; esto no cierra el archivo, y devuelve un resultado incorrecto si la primera línea contiene cualquier espacio en blanco posterior además del carácter de nueva línea en sí. –

+0

@MarkAmery: en realidad, debido a que el identificador de archivo no está asignado a una variable, se recolecta basura inmediatamente, lo que cierra el archivo. (Aunque, por supuesto, la solución aceptada que usa un administrador de contexto aún es mucho mejor). – acdr

8

Muchas otras respuestas aquí, pero para responder precisamente la pregunta que hizo (antes @MarkAmery fue y se editó la pregunta original y cambió 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 en otras palabras, si ya ha leído en 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 sola vez , y toma el primer elemento de la lista resultante.

Tenga en cuenta que esto no incluye el carácter \n al final de la línea, pero asumo que no lo desea 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 gran cantidad de memoria puede que no la considere "eficiente". Como siempre, depende ...

+7

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 encontrar una nueva línea o EOF – randomThought

+0

En realidad, todas las otras respuestas son mejores alternativas que eso. Normalmente, la lectura de un archivo con readline() y sus amigos cargaría bloques enteros a la vez, tal vez 32K más o menos, y busca a través de eso para encontrar la siguiente nueva línea. Mucho más rápido y más eficiente. Mi respuesta solo sería útil si ya * está * cargando todo, en cuyo caso podemos suponer que está bien con todo en la memoria. –

+2

No estoy convencido de haber cambiado el significado. No tiene 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 asker era * no * suponer que '.read()' debe llamarse primero. –

6

Para volver al principio de un archivo abierto, haga lo siguiente:

my_file.seek(0) 
+1

Solo para entender mejor, sería "my_file.seek (0) line = my_file.readline()" –

6
first_line = next(open(filename)) 
+1

¿Esto cierra el archivo también? – abalter

-8
f1 = open("input1.txt", "r") 
print(f1.readline()) 
+8

Hay respuestas múltiples de más de cinco años que contienen * exactamente este enfoque *. No está haciendo nada más que crear ruido al agregar otro. –

Cuestiones relacionadas