如何通过GitHub脚本直接读取OSF上的CSV文件(无需本地下载)
解决方案:无需本地副本直接读取OSF公共CSV文件
要直接读取OSF上的公共CSV文件,核心是使用文件的原始下载直链,而非文件的网页链接。以下是两种简单可行的方法:
方法1:直接使用正确的OSF直链读取
OSF公共文件的原始下载直链格式为:https://osf.io/download/[文件节点ID]/,其中[文件节点ID]是你在文件页面URL中看到的最后一段字符(比如你案例中的74y5r)。
# 替换为你的文件对应的直链 osf_direct_url <- "https://osf.io/download/74y5r/" # 直接读取CSV内容 test <- read.csv(osf_direct_url)
如果遇到HTTPS连接问题,可借助httr包先获取文件文本内容再读取:
library(httr) # 获取文件内容 resp <- GET(osf_direct_url) # 从文本内容读取CSV test <- read.csv(text = content(resp, "text"))
方法2:使用osfr包获取直链后读取
如果你偏好使用osfr包,可以通过检索文件获取其下载直链,再直接读取,无需下载本地副本:
library(osfr) # 用文件的短URL或节点ID检索文件 target_file <- osf_retrieve_file("https://osf.io/74y5r/") # 获取文件的原始下载直链 download_url <- osf_get_url(target_file, type = "download") # 直接读取CSV test <- read.csv(download_url)
你之前操作失败的原因说明
- URL格式错误:你使用的
/files/开头的URL是文件的网页链接,read.csv会读取网页的HTML代码而非CSV内容;带?action=download的URL格式不符合OSF的下载规则,且多了一个冗余的斜杠导致请求错误。 - osfr包使用不当:
osf_download()是将文件下载到本地的函数,若本地已有同名文件会触发冲突错误;你需要的是获取直链后直接读取,而非下载文件。
内容的提问来源于stack exchange,提问作者tnt
相关产品推荐
相关产品推荐

