R:检查“今天的”文件是不是存在,如果不存在,请下载

Posted

技术标签:

【中文标题】R:检查“今天的”文件是不是存在,如果不存在,请下载【英文标题】:R:Check existence of "today's" file and if it doesn't exist, download itR:检查“今天的”文件是否存在,如果不存在,请下载 【发布时间】:2021-02-19 05:26:22 【问题描述】:

我正在尝试检查用户的工作目录中是否有伦敦 Covid 流行数据的最新文件版本,如果没有,请从此处下载:

fileURL <-"https://api.coronavirus.data.gov.uk/v1/data?filters=areaType=region;areaName=London&structure=%7B%22areaType%22:%22areaType%22,%22areaName%22:%22areaName%22,%22areaCode%22:%22areaCode%22,%22date%22:%22date%22,%22newCasesBySpecimenDateRollingSum%22:%22newCasesBySpecimenDateRollingSum%22,%22newCasesBySpecimenDateRollingRate%22:%22newCasesBySpecimenDateRollingRate%22%7D&format=csv"

将该 URL 粘贴到浏览器中会下载 csv 文件。使用 download.file(URL, "data_.csv") 创建垃圾。为什么?

到目前为止我有:

library(data.table)

#Look for COVID file starting with "data_"
destfile <- list.files(pattern = "data_") 
#Find file date
fileDate<-file.info(destfile)$ctime %>%as.Date()

   if(!file.exists(destfile) | fileDate != today())
     res <- tryCatch(download.file(url = fileURL,
                               destfile = paste0("data_",today(),".csv"),
                               method = "auto"),
                 error=function(e) 1)
     if(res!=1) COVIDdata<-data.table::fread(destfile) #This doesn't read the file
   

无论文件上的日期如何,该函数始终会下载文件,但会将其保存为不可读的格式。我每次都采取如下方式下载文件。

COVIDdata <- data.table::fread(fileURL)

下载的垃圾文件是这样的:

【问题讨论】:

if-clause 中的条件显然总是产生TRUE - 我想,原因是fileDate 是一个日期向量,其中你似乎总是有较旧的日期。 max(fileDate) != today() 可能会起作用。 感谢您的快速回复。我认为最大的问题是为什么 download.file 函数不将其保存为 csv 文件。我附上了打开它时的截图。 好像真的和data.table没关系 @jangorecki 这是一个download.file 问题,可能响应标头没有正确读取...... 【参考方案1】:

我认为这是对download.file 的结果进行编码的问题,一种方法是使用fread 获取数据然后使用fwrite 写入:

#Look for COVID file starting with "data_"
destfile <- list.files(pattern = "data_") 
#Find file date
fileDate <- file.info(destfile)$ctime %>% as.Date()
#>[1] "2020-11-06" "2020-11-06" "2020-11-06"

if(!length(destfile) | max(fileDate) != today())
  COVIDdata <- fread(fileURL)
  fwrite(COVIDdata, file = paste0("data_",today(),".csv"))

【讨论】:

以上是关于R:检查“今天的”文件是不是存在,如果不存在,请下载的主要内容,如果未能解决你的问题,请参考以下文章

检查文件是不是存在然后追加记录

用 R 检查远程目录是不是存在

R : 在创建之前检查 R 对象是不是存在

R - 检查 r 数据框行的任何列中是不是存在 NA,如果存在,则删除该行 [重复]

Shell 脚本检查 dir 目录是不是存在然后更改路径,如果不存在则使用该名称创建 dir 并检查文件名不存在

检查容器中是不是存在 NaN