【问题标题】:readLines error while iterating lots of files迭代大量文件时出现 readLines 错误
【发布时间】:2020-04-24 10:14:09
【问题描述】:

我需要遍历一些文件(实际上很多)并通过 gsub 修复一些问题。

library(xml2)
library(magrittr)
lapply(list.files(folder, full.names = TRUE), function(file){
    tryCatch(a1 <- xml2::read_xml(file),
             error = function(e){
               fix_to_write <- readLines(file) %>%
                 gsub("&", "and", .)
               writeLines(fix_to_write, file)
             })
  })

问题是一段时间后我收到无法打开我的文件的错误::

在 readLines(file_to_open) 中: kann Datei '/Volumes/data/welt/xml_out/2012-02/13858485.xml' nicht öffnen:打开的文件太多 受保护的天使 rm: /var/folders/39/z521yg593sx8_thrj843qj_r0000gn/T//Rtmpw4AKJr: 打开的文件太多

我尝试了各种解决方案,例如“closeAllConnections()”或“close(file)”。没有任何效果。有什么建议么?我在 Mac 上工作...

问候

【问题讨论】:

    标签: r readlines


    【解决方案1】:

    只是一个猜测,因为我自己从未遇到过这个问题,但我认为这应该可行:

    lapply(list.files(folder, full.names = TRUE), function(file){
      tryCatch(a1 <- xml2::read_xml(file),
               error = function(e){
                 con <- file(description = file)
                 fix_to_write <- readLines(file) %>%
                   gsub("&", "and", .)
                 close(con)
                 writeLines(fix_to_write, file)
               })
    })
    

    readLines 如果提供了字符串,实际上将打开到文件的连接。这应该在退出时关闭,但明确地这样做可能更有意义。让我知道这是否有帮助。

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 1970-01-01
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-04
      相关资源
      最近更新 更多