CSV 파일을 열지 않고 CSV 파일의 행수를 취득할 수 있습니까?
최대 1GB의 CSV 파일을 가지고 있는데 노트북이 기본 구성이기 때문에 Excel이나 R로 파일을 열 수 없습니다.다만, 궁금해서, 파일내의 행수를 알고 싶습니다.할 수 있다면 어떻게 해야 할까?
Linux/Unix의 경우:
wc -l filename
Windows 의 경우:
find /c /v "A String that is extremely unlikely to occur" filename
옵션 1:
파일 연결을 통해count.fields()파일의 한 줄당 필드 수를 카운트합니다.sep(여기서는 신경 쓰지 않는) 가치.따라서 이 결과의 길이를 계산하면 이론적으로 파일 내의 줄 수(및 행 수)로 끝납니다.
length(count.fields(filename))
머리글 행이 있는 경우 다음 명령을 사용하여 건너뛸 수 있습니다.skip = 1
length(count.fields(filename, skip = 1))
공백 행을 건너뛰는 등 특정 요구에 맞게 조정할 수 있는 다른 인수도 있습니다.
args(count.fields)
# function (file, sep = "", quote = "\"'", skip = 0, blank.lines.skip = TRUE,
# comment.char = "#")
# NULL
봐help(count.fields)자세한 것은 이쪽입니다.
속도면에서는 그렇게 나쁘지 않아요.제 야구 파일 중 하나에 99846줄이 들어있어서 테스트해봤어요.
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
(더 효율적인) 옵션 2: 또 다른 아이디어는data.table::fread()첫 번째 열만 읽으려면 행 수를 선택합니다.이건 매우 빠를 거야.
system.time(nrow(fread("Batting.csv", select = 1L)))
# user system elapsed
# 0.063 0.000 0.063
처음 1000줄의 크기에 따라 줄 수를 예측합니다.
size1000 <- sum(nchar(readLines(con = "dgrp2.tgeno", n = 1000)))
sizetotal <- file.size("dgrp2.tgeno")
1000 * sizetotal / size1000
이것은 보통 대부분의 목적에 적합하며 대용량 파일에도 훨씬 더 빠릅니다.
다음은 제가 사용한 것입니다.
testcon <- file("xyzfile.csv",open="r")
readsizeof <- 20000
nooflines <- 0
( while((linesread <- length(readLines(testcon,readsizeof))) > 0 )
nooflines <- nooflines+linesread )
close(testcon)
nooflines
상세한 것에 대하여는, 다음의 투고를 참조해 주세요.https://www.r-bloggers.com/easy-way-of-determining-number-of-linesrecords-in-a-given-large-file-using-r/
R에서 Tony의 답변 구현:
file <- "/path/to/file"
cmd <- paste("wc -l <", file)
as.numeric(system(cmd, intern = TRUE))
이 속도보다 약 4배 빠른 속도입니다.data.table10만 행의 파일에 대해
> microbenchmark::microbenchmark(
+ nrow(fread("~/Desktop/cmx_bool.csv", select = 1L)),
+ as.numeric(system("wc -l <~/Desktop/cmx_bool.csv", intern = TRUE))
+ )
Unit: milliseconds
expr min lq
nrow(fread("~/Desktop/cmx_bool.csv", select = 1L)) 128.06701 131.12878
as.numeric(system("wc -l <~/Desktop/cmx_bool.csv", intern = TRUE)) 27.70863 28.42997
mean median uq max neval
150.43999 135.1366 142.99937 629.4880 100
34.83877 29.5070 33.32973 270.3104 100
언급URL : https://stackoverflow.com/questions/32913151/is-it-possible-to-get-the-number-of-rows-in-a-csv-file-without-opening-it
'programing' 카테고리의 다른 글
| mongodb의 날짜 비교 (0) | 2023.04.29 |
|---|---|
| 당신은 "@angular/core"에 의존하지 않는 것 같습니다.이것은 오류입니다. (0) | 2023.04.29 |
| ContextMenu를 표시하기 전에 오른쪽 클릭 시 TreeViewNode를 선택합니다. (0) | 2023.04.19 |
| NSAttributedString에서 클릭 가능한 링크를 작성하려면 어떻게 해야 합니까? (0) | 2023.04.19 |
| wpf 데이터그램 대체 행 컬러링 (0) | 2023.04.19 |