ошибка readLines при итерации большого количества файлов - PullRequest
0 голосов
/ 24 апреля 2020

Мне нужно перебрать некоторые файлы (на самом деле много) и исправить некоторые проблемы через 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 ()» или «закрыть (файл)». Ничего не получалось. Какие-либо предложения? Я работаю над Ма c ...

С уважением

1 Ответ

0 голосов
/ 24 апреля 2020

Просто предположение, поскольку я сам никогда не сталкивался с этой проблемой, но я предполагаю, что это должно сработать:

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 фактически откроет соединение с файлом, если предоставлена ​​строка символов. Это должно быть закрыто при выходе, но, возможно, имеет смысл сделать это явно. Дайте мне знать, если это поможет.

...