如何将SFTP获取的Zip二进制对象转为可读格式并接入R Studio Connect
处理SFTP拉取的Zip二进制对象并转为可读格式(最终存入R Studio Connect)
你已经成功通过SFTP拿到了Zip文件的二进制raw对象,确实缺少将二进制Zip解压为可读CSV数据的关键步骤,全程可以在内存中完成,无需写入本地文件,下面是完整的实现流程:
第一步:从二进制Zip对象读取CSV数据
利用R的内存连接功能直接解析二进制数据:
# 把二进制raw对象转为内存连接 zip_conn <- rawConnection(test) # (可选)查看Zip包内的文件列表,确认目标CSV文件名 zip_contents <- utils::unzip(zip_conn, list = TRUE) print(zip_contents$Name) # 输出类似 "filename.csv" # 读取Zip内的CSV文件为数据框(人类可读格式) csv_data <- utils::read.csv( unz(zip_conn, filename = zip_contents$Name[1]), stringsAsFactors = FALSE ) # 关闭内存连接 close(zip_conn)
关键说明:
rawConnection(test):将你获取的二进制raw向量转为R可读取的连接对象,全程在内存操作,避免本地文件IO- 若明确知道Zip内的CSV文件名,可跳过查看列表的步骤,直接写死文件名(比如
"filename.csv") - 处理大文件时,推荐用
readr::read_csv替代utils::read.csv,速度更快且支持更多编码格式
第二步:将数据存入R Studio Connect的Pin
使用pins包完成数据上传,确保已配置好R Studio Connect的连接权限:
library(pins) # 连接到R Studio Connect(自动读取本地rsconnect配置,无需手动输入密钥) board <- board_rsconnect() # 将数据框作为Pin存入 pin_write( board = board, x = csv_data, name = "sftp_auto_pulled_data", type = "rds", description = "通过SFTP自动化拉取并解压的CSV数据" )
额外提示:
- 如果Zip包内包含多个文件,可通过循环
zip_contents$Name逐个读取处理 - 若未配置过R Studio Connect,先用
rsconnect::connectUser()完成账号绑定,后续board_rsconnect()会自动读取配置
内容的提问来源于stack exchange,提问作者QMan5
相关产品推荐
相关产品推荐

