如何在R语言中从受密码保护的SFTP服务器读取XLSX文件
如何在R语言中从受密码保护的SFTP服务器读取XLSX文件
你好!看到你已经能通过getURL获取到SFTP服务器上的XLSX文件路径,但卡在了读取文件这一步,我来给你两种实用的解决方法,同时也会处理路径含空格的问题:
方法一:使用ssh包(推荐,更现代稳定)
ssh包是R中处理SSH/SFTP连接的现代工具,操作更直观,也能很好处理带空格的路径。
步骤:
- 先安装所需的包:
install.packages(c("ssh", "openxlsx"))
- 编写代码连接SFTP、下载并读取文件:
library(ssh) library(openxlsx) # 建立SFTP连接(这里用密码认证,推荐用密钥认证更安全) sftp_session <- ssh_connect( host = "datasource.eex-group.com", username = "你的SFTP用户名", password = "你的SFTP密码" ) # 定义远程文件路径,直接写带空格的路径即可,ssh包能自动处理 remote_file_path <- "market data/power/ch/derivatives/xls/2023/PowerFutureHistory_CH_2023.xlsx" # 创建一个临时文件来存储下载的XLSX(R会自动清理临时文件,不用手动删除) temp_xlsx <- tempfile(fileext = ".xlsx") # 从SFTP服务器下载文件到临时文件 ssh_download(sftp_session, remote_file_path, temp_xlsx) # 读取XLSX文件到数据框 df <- read.xlsx(temp_xlsx) # 关闭SFTP连接 ssh_disconnect(sftp_session) # 查看读取的数据 head(df)
提示:如果想更安全,建议用SSH密钥认证,把
password参数换成keyfile = "你的密钥文件路径"即可,避免硬编码密码。
方法二:结合RCurl和openxlsx(适配你已有的工具链)
如果你已经在使用RCurl,可以直接用它获取文件二进制内容,再写入临时文件读取:
步骤:
- 确保安装了所需包:
install.packages(c("RCurl", "openxlsx"))
- 编写代码处理带空格的路径并读取文件:
library(RCurl) library(openxlsx) # 设置SFTP认证信息,格式为"用户名:密码" options(RCurlOptions = list( userpwd = "你的SFTP用户名:你的SFTP密码", ssl.verifypeer = FALSE # 仅当服务器证书验证有问题时使用,优先信任合法证书 )) # 处理带空格的路径:把空格替换成%20(URL编码格式) remote_file_url <- "sftp://datasource.eex-group.com/market%20data/power/ch/derivatives/xls/2023/PowerFutureHistory_CH_2023.xlsx" # 获取文件的二进制内容 xlsx_binary <- getBinaryURL(remote_file_url) # 写入临时文件 temp_xlsx <- tempfile(fileext = ".xlsx") writeBin(xlsx_binary, temp_xlsx) # 读取XLSX文件 df <- read.xlsx(temp_xlsx) # 可选:删除临时文件(R退出时会自动清理,也可以手动删) file.remove(temp_xlsx) # 查看数据 head(df)
注意事项:
- 路径空格处理:方法一中
ssh包支持直接写带空格的路径;方法二中需要把空格转成%20的URL编码格式,或者用引号包裹路径。 - 安全问题:绝对不要在代码里硬编码密码!可以用
Sys.getenv("SFTP_PASSWORD")从环境变量读取密码,或者用密钥认证,避免密码泄露。
备注:内容来源于stack exchange,提问作者MPB_2022
相关产品推荐
相关产品推荐

