【发布时间】: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问题,可能响应标头没有正确读取......
标签: r data.table