Ho un file CSV di dimensioni ~ 1 GB e, poiché il mio laptop è di configurazione di base, non riesco ad aprire il file in Excel o R. Ma per curiosità, mi piacerebbe avere il numero di righe nel file. Come posso farlo, se posso farlo davvero. Grazie in anticipo.È possibile ottenere il numero di righe in un file CSV senza aprirlo?
risposta
per Linux/Unix:
wc -l filename
Per Windows:
find /c /v "A String that is extremely unlikely to occur" filename
Non sono sicuro della sua efficienza, ma qui è un approccio di base R. Tramite una connessione file, count.fields()
conta il numero di campi per riga del file. Quindi, se prendiamo la lunghezza del risultato, teoricamente dovremmo finire con il numero di righe (righe) nel file.
length(count.fields(filename))
E se si dispone di una riga di intestazione, si può saltare con skip = 1
length(count.fields(filename, skip = 1))
Non ci sono altri argomenti che è possibile regolare per le vostre esigenze specifiche.
args(count.fields)
# function (file, sep = "", quote = "\"'", skip = 0, blank.lines.skip = TRUE,
# comment.char = "#")
# NULL
Vedere help(count.fields)
per ulteriori informazioni.
Aggiornamento: Non è male per quanto riguarda la velocità. L'ho appena testato su uno dei miei file di baseball che contiene 99846 righe.
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
Un'altra idea è quella di utilizzare data.table::fread()
di leggere la prima colonna solo, poi prendere il numero di righe. Questo sarebbe molto veloce.
system.time(nrow(fread("Batting.csv", select = 1L)))
# user system elapsed
# 0.063 0.000 0.063
Qui è qualcosa che ho usato:
testcon <- file("xyzfile.csv",open="r")
readsizeof <- 20000
nooflines <- 0
(while((linesread <- length(readLines(testcon,readsizeof))) > 0)
nooflines <- nooflines+linesread)
close(testcon)
nooflines
Partenza questo post per di più: https://www.r-bloggers.com/easy-way-of-determining-number-of-linesrecords-in-a-given-large-file-using-r/
Forse solo 'wc -l yourfile.csv' da una riga di comando, o qualcosa del genere ? – joran
Se la dimensione del file è 1 GB, dovresti riuscire a importarlo. Ovviamente, non dovresti farlo con 'read.table' e gli amici. Usa 'fread' dal pacchetto data.table. – Roland
quindi stai dicendo che 'nrow (read.csv (" file.csv ", intestazione = T/F))' blocca R? E sì, 'fread' certamente ha preferito –