You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中从受密码保护的SFTP服务器读取XLSX文件

如何在R语言中从受密码保护的SFTP服务器读取XLSX文件

你好!看到你已经能通过getURL获取到SFTP服务器上的XLSX文件路径,但卡在了读取文件这一步,我来给你两种实用的解决方法,同时也会处理路径含空格的问题:

方法一:使用ssh包(推荐,更现代稳定)

ssh包是R中处理SSH/SFTP连接的现代工具,操作更直观,也能很好处理带空格的路径。

步骤:

  1. 先安装所需的包:
install.packages(c("ssh", "openxlsx"))
  1. 编写代码连接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,可以直接用它获取文件二进制内容,再写入临时文件读取:

步骤:

  1. 确保安装了所需包:
install.packages(c("RCurl", "openxlsx"))
  1. 编写代码处理带空格的路径并读取文件:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 12:02:59