Tenemos un gran archivo de datos sin procesar que nos gustaría recortar a un tamaño específico. Tengo experiencia en .net c #, sin embargo, me gustaría hacer esto en Python para simplificar las cosas y por interés.
¿Cómo haría para obtener las primeras N líneas de un archivo de texto en Python? ¿El sistema operativo utilizado tendrá algún efecto en la implementación?
Respuestas:
Python 2
Python 3
Aquí hay otra forma (Python 2 y 3)
fuente
fuente
f = open("file")
sin excepción el manejo para cerrar el archivo. La forma Pythonic de manejar archivos es con un administrador de contexto, es decir, usando la instrucción with. Esto está cubierto en el tutorial de Python de entrada y salida ."It is good practice to use the with keyword when dealing with file objects. This has the advantage that the file is properly closed after its suite finishes, even if an exception is raised on the way."
Si desea leer las primeras líneas rápidamente y no le importa el rendimiento, puede usar el
.readlines()
que devuelve el objeto de la lista y luego cortar la lista.Por ejemplo, para las primeras 5 líneas:
Una ventaja en comparación con las otras respuestas es la posibilidad de seleccionar fácilmente el rango de líneas, por ejemplo, omitir las primeras 10 líneas
[10:30]
o las últimas 10[:-10]
o tomar solo líneas pares[::2]
.fuente
Lo que hago es llamar a las líneas N usando
pandas
. Creo que el rendimiento no es el mejor, pero por ejemplo siN=1000
:fuente
nrows
opción, que se puede establecer en 1000 y no se carga todo el archivo. pandas.pydata.org/pandas-docs/stable/generated/… En general, pandas tiene esta y otras técnicas de ahorro de memoria para archivos grandes.sep
a definir un delimitador de columna (que no debería ocurrir en un archivo que no CSV)pandas.read()
función en la documentación, ¿conoce alguna información sobre el tema?No existe un método específico para leer el número de líneas expuestas por el objeto de archivo.
Supongo que la forma más fácil sería seguir:
fuente
Basado en la respuesta más votada de gnibbler (20 de noviembre de 2009 a las 0:27): esta clase agrega el método head () y tail () para archivar el objeto.
Uso:
fuente
Las dos formas más intuitivas de hacer esto serían:
Iterar en el archivo línea por línea y
break
después de lasN
líneas.Iterar en el archivo línea por línea usando los tiempos del
next()
métodoN
. (Esto es esencialmente una sintaxis diferente de lo que hace la respuesta principal).Aquí está el código:
La conclusión es que, siempre que no use
readlines()
oenumerate
guarde todo el archivo en la memoria, tiene muchas opciones.fuente
La forma más conveniente por mi cuenta:
Solución basada en la comprensión de la lista La función open () admite una interfaz de iteración. El enumerate () cubre las tuplas open () y return (index, item), luego verificamos que estamos dentro de un rango aceptado (si i <LINE_COUNT) y luego simplemente imprimimos el resultado.
Disfruta el Python. ;)
fuente
[next(file) for _ in range(LINE_COUNT)]
.Para las primeras 5 líneas, simplemente haga:
fuente
Si desea algo que obviamente (sin buscar cosas esotéricas en los manuales) funcione sin importaciones e intente / excepto y funcione en una gama justa de versiones de Python 2.x (2.2 a 2.6):
fuente
Si tiene un archivo realmente grande, y suponiendo que desea que la salida sea una matriz vacía, el uso de np.genfromtxt congelará su computadora. Esto es mucho mejor en mi experiencia:
fuente
A partir de Python 2.6, puede aprovechar funciones más sofisticadas en la clase base IO. Entonces, la respuesta mejor calificada arriba se puede reescribir como:
(No tiene que preocuparse de que su archivo tenga menos de N líneas ya que no se produce ninguna excepción StopIteration).
fuente
lines
pero el argumento hace referenciabytes
.Esto funciono para mi
fuente
Esto funciona para Python 2 y 3:
fuente
fuente
Este método funcionó para mi
fuente