Estoy usando Python (Django Framework) para leer un archivo CSV. Saco solo 2 líneas de este CSV como puede ver. Lo que he estado tratando de hacer es almacenar en una variable el número total de filas del CSV también.
¿Cómo puedo obtener el número total de filas?
file = object.myfilePath
fileObject = csv.reader(file)
for i in range(2):
data.append(fileObject.next())
Yo he tratado:
len(fileObject)
fileObject.length
file_read
? ¿Es un identificador de archivo (como enfile_read = open("myfile.txt")
?Respuestas:
Necesitas contar el número de filas:
El uso
sum()
con una expresión generadora lo convierte en un contador eficiente, evitando almacenar todo el archivo en la memoria.Si ya leyó 2 filas para empezar, entonces necesita agregar esas 2 filas a su total; las filas que ya se han leído no se cuentan.
fuente
\x1A
) en el archivo? ¿Cómo abriste el archivo?file.seek(0)
entoncesfileObject = csv.reader(file)
2018-10-29 EDITAR
Gracias por los comentarios.
Probé varios tipos de código para obtener la cantidad de líneas en un archivo csv en términos de velocidad. El mejor método es el siguiente.
Aquí está el código probado.
El resultado estaba por debajo.
En conclusión,
sum(1 for line in f)
es el más rápido. Pero puede que no haya una diferencia significativa entrelen(f.readlines())
.sample_submission.csv
tiene 30,2 MB y 31 millones de caracteres.fuente
for row in csv_reader:
solución cuando se supone que el CSV contiene nuevas líneas válidas entre comillas según rfc4180 . @dixhom ¿qué tamaño tenía el archivo que probaste?Para hacerlo, debe tener un poco de código como mi ejemplo aquí:
Espero que esto ayude a todos.
fuente
%time sum(1 for row in open("df_data_raw.csv"))
cuesta 4.91s mientras que%time len(open("df_data_raw.csv").readlines())
cuesta 14.6s.Varias de las sugerencias anteriores cuentan el número de LÍNEAS en el archivo csv. Pero algunos archivos CSV contendrán cadenas entre comillas que a su vez contienen caracteres de nueva línea. Los archivos MS CSV generalmente delimitan registros con \ r \ n, pero usan \ n solo dentro de las cadenas entre comillas.
Para un archivo como este, contar líneas de texto (delimitadas por una nueva línea) en el archivo dará un resultado demasiado grande. Entonces, para un recuento preciso, debe usar csv.reader para leer los registros.
fuente
Primero tienes que abrir el archivo con open
Luego use el csv.reader para abrir el csv
Por último, puede tomar el número de fila con la instrucción 'len'
El código total es este:
Recuerde que si desea reutilizar el archivo csv, debe hacer un input_file.fseek (0), porque cuando usa una lista para el reader_file, lee todo el archivo y el puntero en el archivo cambia su posición.
fuente
row_count = sum(1 for line in open(filename))
trabajó para mi.Nota:
sum(1 for line in csv.reader(filename))
parece calcular la longitud de la primera líneafuente
fuente
file_read
es al parecer uncsv.reader()
objeto, por lo que no tiene unreadlines()
método..readlines()
tiene que crear una lista potencialmente grande, que luego descarta nuevamente.cuando crea una instancia de un objeto csv.reader e incluye todo el archivo, puede acceder a una variable de instancia llamada line_num que proporciona el recuento de filas:
fuente
fuente
Utilice "lista" para ajustar un objeto más funcional.
Luego puede contar, saltar, mutar hasta el deseo de su corazón:
fuente
Esto funciona para csv y todos los archivos que contienen cadenas en sistemas operativos basados en Unix:
En caso de que el archivo csv contenga una fila de campos, puede deducir una de
numOfLines
arriba:fuente
También puede utilizar un bucle for clásico:
fuente
Es posible que desee probar algo tan simple como a continuación en la línea de comando:
sed -n '$=' filename
owc -l filename
fuente
Creo que podemos mejorar un poco la mejor respuesta, estoy usando:
Además, no debemos olvidar que el código pitónico no siempre tiene el mejor rendimiento en el proyecto. Por ejemplo: si podemos hacer más operaciones al mismo tiempo en el mismo conjunto de datos, es mejor hacer todas en el mismo bucle en lugar de hacer dos o más bucles pitónicos.
fuente
tratar
y en la salida puede ver algo como (aa, bb) donde aa es el número de filas
fuente
data.shape[0]
fuente