如何在R中获取格式化的文件大小(KB、MB、GB、TB)?

3

file.size()函数返回文件的大小(以字节为单位)。我们如何将返回的字节转换为相应的KB、MB、GB或TB?

例如:

255Bytes = 255B
19697Bytes = 19.24KB
13230426Bytes = 12.62MB

1
可能是重复问题?https://stackoverflow.com/q/63459178/3358272(这是一个不完全的重复问题,但它比这个问题多了一点...它是这个问题的“超集”) - r2evans
从那里的我的回答中,使用 KMG(c(255, 19697, 13230426), suffix="B", standard="legacy") 并获得 [1] "255B" "19.7KB" "13.2MB" - r2evans
2
我无法回答因为它已经被复制,但是你可以使用 utils:::format.object_size 函数来绕过这个问题 - 例如 utils:::format.object_size(file.size("filename.r"), "Mb") 可以转换为“B”、“kB”、“MB”、“GB”、“TB”、“PB”、“EB”、“ZB”、“YB”、“KiB”、“MiB”、“GiB”、“TiB”、“PiB”、“EiB”、“ZiB”、“YiB”、“b”、“Kb”、“Mb”、“Gb”、“Tb”、“Pb” 和 “KB”。 - thelatemail
2个回答

1

我们可以尝试使用dplyr包中的case_when函数来进行暴力处理:

library(dplyr)
input <- 123456    # numerical input as number of bytes
output <- case_when(
    input < 1000 ~    paste0(input, "B"),
    input < 1000000 ~ paste0(input / 1000, "KB"),
    input < 1000000000 ~ paste0(input / 1000000, "MB"),
    input < 1000000000000 ~ paste0(input / 1000000000, "GB"),
    input < 1000000000000000 ~ paste0(input / 1000000000, "TB"),
    TRUE ~ paste0(input, "B")  # for anything larger than 999TB, just report bytes
)
output

[1] "123.456KB"

1

我在其他编程语言中找到了各种解决方案。但是这篇文章提供了由@Rohit Jain建议的工作良好的解决方案。通过实施小的调整,我将其应用于一个R函数:


file_size_formated <- function(size){
  
  k = size/1024.0 ^ 1
  m = size/1024.0 ^ 2
  g = size/1024.0 ^ 3
  t = size/1024.0 ^ 4
  
    if (t > 1) {
      outSize = paste0(round(t,2),"TB")
    } else if (g > 1) {
      outSize = paste0(round(g,2),"GB")
    } else if (m > 1) {
      outSize = paste0(round(m,2),"MB")
    } else if (k > 1) {
      outSize = paste0(round(k,2),"KB")
    } else{
      outSize = paste0(round(size,2),"B")
    }
    
  return(outSize)
}

假设您想获取设备上“www”文件夹中所有文件的文件大小:

# Normal output
 file.size(list.files("www",full.names = TRUE))

  [1]      255      307      856     1205     1038     5940      250     3940      328     1593    53938 59061210  3750711    16251    42756
 [16]     6709    19697 13230426

# Function Output

sapply(file.size(list.files("www",full.names = TRUE)),file_size_formated)

 [1] "255B"    "307B"    "856B"    "1.18KB"  "1.01KB"  "5.8KB"   "250B"    "3.85KB"  "328B"    "1.56KB"  "52.67KB" "56.33MB" "3.58MB"  "15.87KB"
[15] "41.75KB" "6.55KB"  "19.24KB" "12.62MB"




网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接