【问题标题】:How can I check if a file is empty?如何检查文件是否为空?
【发布时间】:2014-04-23 19:56:00
【问题描述】:

我有数千个文本文件,想知道如何检查特定文件是否为空。我正在使用这行代码读取所有文件

Y<-grep("*.txt", list.files(), value = TRUE)

我想要一份所有空白文件的名称列表。必须在 R 中完成。

谢谢。

【问题讨论】:

  • (请注意,您的正则表达式可能包含您不想要的文件。您的正则表达式在任何地方搜索带有txt 的任何字符串(第一个字符除外)。参见grep("*.txt", c("file.txt", "filewithtxt.doc", "txtfile.docx"))。正如Konrad 提到的,正确的正则表达式是\\.txt$。)

标签: r


【解决方案1】:

你可以使用file.size:

empty = filenames[file.size(filenames) == 0L]

file.sizefile.info 的快捷方式:

info = file.info(filenames)
empty = rownames(info[info$size == 0L, ])

顺便说一句,列出文本文件的方法比使用grep 更好:将pattern 参数指定给list.files

list.files(pattern = '\\.txt$')

请注意,模式必须是正则表达式,而不是 glob — grep 也是如此!

【讨论】:

  • 谢谢。我可以简单地把 filenames=Y 或者我把它放在一个循环中吗?
  • 不需要循环。事实上,尽量不要在 R 中使用循环,R 的设计使得它们(几乎完全)是不必要的。
  • 非常好。当需要条件时,可以在一行中完成。我有一些数据并不总是存在噪音。所以为了在有数据时处理它,我有以下代码:if (file.info('FILENAME')$size == 0) { &lt;&lt;do your job&gt;&gt; }
  • 如果有的文件是空的,有的没有,我需要放入一个if语句。我需要调整到if (nrow(info [info$size==0,]) !=0),因为当表为空时使用rownames会抛出错误
  • 自 R 3.2 file.size() 允许您节省一些输入。
【解决方案2】:

对于函数式方法,你可以先写一个谓词:

file.empty <- function(filenames) file.info(filenames)$size == 0

然后使用它过滤文件列表:

Filter(file.empty, dir())

【讨论】:

    【解决方案3】:
    find . -empty 
    

    find . -empty |awk -F\/ '{print $FN}'
    

    如果您只想限制 txt 文件:

    find . -empty -name "*.txt"
    

    如果您只需要 asci 文件(而不仅仅是 .txt)

    find . -empty -type f
    

    把它们放在一起:

    find . -empty -type f -name "*.txt" |awk -F\/ '{print $NF}'
    

    【讨论】:

    • 请注意,此解决方案不是独立于平台的。
    • 对不起,不熟悉'R'!
    【解决方案4】:

    上传前使用以下代码检查系统中的文件是否为空。

    my_file<-readLines(paste0("<path of file/file name.extension>"))
    my_file=="" #TRUE - means the file is empty
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-14
      • 2023-02-16
      • 2013-03-31
      • 1970-01-01
      • 2015-10-26
      • 1970-01-01
      • 2011-05-03
      相关资源
      最近更新 更多