我们如何以R为单位获取格式化的文件大小,以KB,MB,GB,TB为单位?

时间:2020-08-23 05:52:03

标签: r

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

例如

gantt

2 个答案:

答案 0 :(得分:1)

我们可以使用case_when软件包中的dplyr尝试暴力破解方法:

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 :(得分:1)

我发现了其他编程语言中的各种解决方案。但是this post拥有@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"



相关问题