【问题标题】:Download .RData and .csv files from FTP using RCurl (or any other method)使用 RCurl(或任何其他方法)从 FTP 下载 .RData 和 .csv 文件
【发布时间】:2013-09-20 21:34:26
【问题描述】:

我已将 .RData 文件(使用 save() 创建)上传到 ftp 服务器,我正在尝试使用 getURL() 下载相同的文件。对于我读过的所有示例和帖子,我似乎无法让它发挥作用。

.RData 文件是使用以下方法保存的:

save(results, file=RDataFilePath, compress="xz") #save object "results" w/ compression
#RDataFilePath is the location of the results.RData file on my harddrive

这些数据是通过以下方式上传的:

uploadURL <-"ftp://name:password@host/folder/results.RData" #name the url
ftpUpload(RDataFilePath, to=uploadURL, connecttimeout=120) #upload

这就是我尝试使用getURL 下载results.RData 的方式:

downloadURL <- "host/folder/results.RData"
load(getURL(downloadURL, userpwd="name:password", connecttimeout=120))

这给出了以下错误:

Error in curlPerform(curl = curl, .opts = opts, .encoding = .encoding) : 
  embedded nul in string: 'ý7zXZ'

当我将downloadURL 字符串粘贴到浏览器中时,.RData 文件会立即下载,所以我知道没有错字。错误消息表明 url 无法读取压缩格式的 b/c;但是,当我使用 save() w/o 压缩时,我会收到类似的错误消息。

我在尝试从 FTP 下载 .csv 文件时也收到一条错误消息:

read.csv(getURL(downloadURL1)) #downloadURL1 is similar to downloadURL, but points to the .csv file
Error in file(file, "rt") : cannot open the connection 

然后是一个警告,指出 In addition: Warning message: In file(file, "rt") : cannot open file,然后开始列出 .csv 的内容。

我在早上的大部分时间里一直在努力解决这个问题,但我觉得我一定错过了一些非常基本的东西。我猜我需要更改一些 curl 选项,以便它知道它将读取什么类型的文件。我的语法可能有点不对劲,而且我没有正确使用 getURL,但我不确定我应该做什么。

任何提示将不胜感激。

附言我目前的做法是基于这个Post

【问题讨论】:

    标签: r ftp download rcurl


    【解决方案1】:

    您可以尝试将其分为两个步骤:首先下载文件,然后加载它。

    download.file(downloadURL, "temp.rData")
    load("temp.rData")
    

    或者坚持使用 rCurl 你可以试试:

    bin = getBinaryURL(downloadURL, ...yourOtherParams...) 
    writeBin(bin, "temp.rData")  
    load("temp.rData")
    

    【讨论】:

    • 此方法适用于 .csv 文件(我使用了 test=getURL( )read.csv(text=test) 谢谢!但是,尝试读取 .RData 文件时仍然出现错误“curlPerform 中的错误(curl = curl, .opts = opts, .encoding = .encoding) : 在字符串中嵌入 nul: 'ý7zXZ'"。当我尝试 download.file 时,它​​说它无法打开 URL。
    • 你在unix系统上吗?如果你有命令行使用的 curl 设置,你可以在 R 中尝试类似 system("curl xxxx temp.rData") 的东西。如果 curl 不起作用,也许 "wget" 会起作用?
    • 我在 OSX 上,我的同事将在 Windows 上。我对download.file的了解并不远,它不会连接到服务器。我一直在使用 RCurl 包。使用getBinaryURL() 我可以以二进制形式进入文件,但这都是乱码,我不知道如何转换它。它的类是“原始的”,并且 save() 然后 load() 再次不会将其转换回原始 R 对象(或任何有意义的对象)。
    • 这就像一个魅力!我差点放弃了……非常感谢!我花了 6.5 小时寻找解决方案,这就是让我到达那里的原因。我希望其他试图解决这个问题的人找到你的答案:) 还应该注意的是,我不必将任何其他特殊参数传递给 getBinaryURL,默认值有效(除了我必须传递我的名字:传递给 `userpwd =')。
    【解决方案2】:

    我也花了很多时间在这上面 - 希望在 Shiny 应用程序中使用它,所以我不想写入磁盘。

    library(RCurl)
    url <- "ftp://F1World@aesius.ca/ALLF1Data.Rda"
    userpwd <- "name:password"
    bin = getBinaryURL(url, userpwd = userpwd, verbose = TRUE,
                       ftp.use.epsv = TRUE)
    
    load(rawConnection(bin))
    

    通过使用 rawConnection(),我能够避免写入磁盘步骤,因为它完美地处理了 RAW 数据类型并避免了错误。 仅供参考-这是我的第一篇文章,希望对您有所帮助

    【讨论】:

    • 这个方案似乎不适用于“.RData”文件; R 回来了:the input does not start with a magic number compatible with loading from a connection,此解决方案仅适用于“.Rda”文件吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    相关资源
    最近更新 更多