webentwicklung-frage-antwort-db.com.de

Ist es möglich, die Anzahl der Zeilen in einer CSV-Datei abzurufen, ohne sie zu öffnen?

Ich habe eine CSV-Datei mit einer Größe von ~ 1 GB, und da mein Laptop eine grundlegende Konfiguration hat, kann ich die Datei nicht in Excel oder R öffnen. Aber aus Neugierde möchte ich die Anzahl der Zeilen im Datei. Wie soll ich das machen, wenn ich überhaupt kann?

17
Ohhm Prakash

Für Linux/Unix:

wc -l filename

Für Windows:

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

Option 1:  

Über eine Dateiverbindung zählt count.fields() die Anzahl der Felder pro Zeile der Datei basierend auf einem sep-Wert (der uns hier nicht wichtig ist). Wenn wir uns also die Länge dieses Ergebnisses nehmen, sollten wir theoretisch die Anzahl der Zeilen (und Zeilen) in der Datei erhalten.

length(count.fields(filename))

Wenn Sie eine Kopfzeile haben, können Sie diese mit skip = 1 überspringen.

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

Es gibt andere Argumente, die Sie an Ihre speziellen Bedürfnisse anpassen können, z. B. das Überspringen von Leerzeilen.

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

Siehe help(count.fields) für mehr.

Es ist nicht so schlimm, was die Geschwindigkeit angeht. Ich habe es in einer meiner Baseball-Dateien getestet, die 99846 Zeilen enthält.

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

(Je effizienter) Option 2: Eine andere Idee ist, data.table::fread() nur zum Lesen der ersten Spalte zu verwenden und dann die Anzahl der Zeilen zu übernehmen. Das wäre sehr schnell.

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

Hier ist etwas, was ich verwendet habe:

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

In diesem Beitrag finden Sie weitere Informationen: https://www.r-bloggers.com/easy-way-of-determining-number-of-linesrecords-in-a-given-large-file- using- r/

1
Narahari B M

Schätzen Sie die Anzahl der Zeilen basierend auf der Größe der ersten 1000 Zeilen

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

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

Dies ist normalerweise für die meisten Zwecke gut genug - und für große Dateien viel schneller.

0
pallevillesen