web-dev-qa-db-fra.com

Est-il possible d’obtenir le nombre de lignes d’un fichier CSV sans l’ouvrir?

J'ai un fichier CSV de taille ~ 1 Go, et comme mon ordinateur portable est de configuration de base, je ne parviens pas à ouvrir le fichier dans Excel ou R. Mais, par curiosité, j'aimerais connaître le nombre de lignes du fichier. fichier. Comment vais-je le faire, si je peux le faire du tout?

17
Ohhm Prakash

Pour Linux/Unix:

wc -l filename

Pour les fenêtres:

find /c /v "A String that is extremely unlikely to occur" filename
26
Tony Ruth

Option 1:  

À travers une connexion de fichier, count.fields() compte le nombre de champs par ligne du fichier en fonction de la valeur sep (dont nous ne nous soucions pas ici). Donc, si nous prenons la longueur de ce résultat, nous devrions théoriquement nous retrouver avec le nombre de lignes (et de lignes) dans le fichier.

length(count.fields(filename))

Si vous avez une ligne d'en-tête, vous pouvez l'ignorer avec skip = 1

length(count.fields(filename, skip = 1))

Il existe d'autres arguments que vous pouvez adapter à vos besoins spécifiques, tels que le saut de lignes vides.

args(count.fields)
# function (file, sep = "", quote = "\"'", skip = 0, blank.lines.skip = TRUE, 
#     comment.char = "#") 
# NULL

Voir help(count.fields) pour plus.

Ce n'est pas si mal en ce qui concerne la vitesse. Je l'ai testé sur l'un de mes fichiers de baseball contenant 99846 lignes.

nrow(data.table::fread("Batting.csv"))
# [1] 99846

system.time({ l <- length(count.fields("Batting.csv", skip = 1)) })
#   user  system elapsed 
#  0.528   0.000   0.503 

l
# [1] 99846
file.info("Batting.csv")$size
# [1] 6153740

(Le plus efficace) Option 2: Une autre idée est d'utiliser data.table::fread() pour lire la première colonne uniquement, puis de prendre le nombre de lignes. Ce serait très rapide.

system.time(nrow(fread("Batting.csv", select = 1L)))
#   user  system elapsed 
#  0.063   0.000   0.063 
18
Rich Scriven

Voici quelque chose que j'ai utilisé:

testcon <- file("xyzfile.csv",open="r")
readsizeof <- 20000
nooflines <- 0
( while((linesread <- length(readLines(testcon,readsizeof))) > 0 ) 
nooflines <- nooflines+linesread )
close(testcon)
nooflines

Consultez cet article pour plus: https://www.r-bloggers.com/easy-way-of-determining-number-of-linesrecords-in-a-given-large-file-using- r/

1
Narahari B M

Estimez le nombre de lignes en fonction de la taille des 1000 premières lignes

size1000  <- sum(nchar(readLines(con = "dgrp2.tgeno", n = 1000)))

sizetotal <- file.size("dgrp2.tgeno")
1000 *  sizetotal / size1000

Cela est généralement suffisant pour la plupart des applications, et beaucoup plus rapide pour les gros fichiers.

0
pallevillesen