首页 > 解决方案 > 迭代大量文件时出现 readLines 错误

问题描述

我需要遍历一些文件(实际上很多)并通过 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:打开文件太多: 打开的文件太多

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

问候

标签: rreadlines

解决方案


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

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


推荐阅读