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 数据框行的任何列中是不是存在 NA,如果存在,则删除该行 [重复]