【问题标题】:How can we get the formated file size in KB, MB, GB, TB in R? [duplicate]我们如何在 R 中获得以 KB、MB、GB、TB 为单位的格式化文件大小? [复制]
【发布时间】:2020-08-23 05:52:03
【问题描述】:

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

例如

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

【问题讨论】:

  • 可能被骗? stackoverflow.com/q/63459178/3358272(这是一个不完美的骗局,但它的要求比这个问题多一点……这是这个问题的“超集”)
  • 从我那里的回答中,使用KMG(c(255, 19697, 13230426), suffix="B", standard="legacy") 并获取[1] "255B" "19.7KB" "13.2MB"
  • 我无法回答,因为它被欺骗了,但您可以使用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”。

标签: r


【解决方案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"

【讨论】:

    【解决方案2】:

    我在其他编程语言中找到了各种解决方案。但是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"
    
    
    
    

    【讨论】:

      猜你喜欢
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 1970-01-01
      • 2023-02-13
      • 2014-08-28
      • 2012-08-02
      • 1970-01-01
      相关资源
      最近更新 更多