如何通过Pandas加载远程SSH服务器上的CSV文件?
直接用Pandas加载SSH远程CSV文件的几种办法
方法1:用Paramiko建立SFTP连接读取
先安装依赖:
pip install paramiko
代码示例:
import pandas as pd import paramiko # 建立SSH连接 ssh_client = paramiko.SSHClient() ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 密码登录可添加 password='你的密码' 参数;密钥登录无需额外传参,默认读取本地~/.ssh/id_rsa ssh_client.connect('1.2.3.4', username='root') # 打开SFTP会话并读取远程文件 with ssh_client.open_sftp().open('/data/xxx.csv') as remote_file: df = pd.read_csv(remote_file) # 处理完毕关闭连接 ssh_client.close()
方法2:用SSHFS挂载远程目录(适合多文件批量处理)
这种方式把远程服务器的目录挂载到本地,之后读取文件和操作本地文件完全一致,批量处理多文件更高效。
- 先安装sshfs:
- Ubuntu/Debian系统:
sudo apt install sshfs - macOS系统:先安装Homebrew,再执行
brew install sshfs
- Ubuntu/Debian系统:
- 挂载远程目录到本地文件夹:
sshfs root@1.2.3.4:/data/ ~/remote_data
- 直接用Pandas读取文件:
import pandas as pd df = pd.read_csv('~/remote_data/xxx.csv')
- 处理完成后卸载挂载:
umount ~/remote_data
方法3:用subprocess直接拉取文件内容(轻量无额外依赖)
如果不想安装新库,可以借助系统自带的ssh命令读取远程文件内容,再传给Pandas处理:
import pandas as pd import subprocess # 通过ssh执行cat命令获取远程文件内容 cmd_result = subprocess.run( ['ssh', 'root@1.2.3.4', 'cat /data/xxx.csv'], capture_output=True, text=True ) # 将输出内容转为可读取的流,传给read_csv df = pd.read_csv(pd.compat.StringIO(cmd_result.stdout))
实用提示
- 密钥登录配置:把本地SSH公钥(
~/.ssh/id_rsa.pub)添加到远程服务器的~/.ssh/authorized_keys文件中,即可免密码连接,避免每次输入密码的麻烦 - 多服务器批量处理:可以把连接、读取逻辑封装成函数,遍历你的服务器列表,逐个读取CSV文件后合并处理
内容的提问来源于stack exchange,提问作者nothingisme
相关产品推荐
相关产品推荐

