python - 从远程读取 h5 文件

标签 python ssh

我有一个问题,我无法从我的服务器读取 h5 文件。我的服务器上有 ssh,服务器也是本地的。所以我有两种类型的代码:

store1 = pd.HDFStore(os.system("scp newrow_data_copy.h5 lucy@192.168.1.51:media/lucy/hdd1/hdf_row/Archive1"))

错误是预期的字节,得到了 int。另外os.system说错了,应该是string

store1 = pd.HDFStore('//192.168.1.51/media/lucy/hdd1/hdf_row/Archive1/newrow_data_copy.h5', mode='r')

错误:文件不存在。不过,我在服务器上看到了该文件。

从远程服务器读取 h5 文件出了什么问题,我应该怎么做。我下载不了,因为文件太大了。

最佳答案

您知道,根据定义,读取整个远程文件就是下载,对吧?将文件下载到工作内存还是磁盘是一个完全不同的问题。

话虽如此,除非您愿意编写自己的 tty 模拟器,否则 sshscp 对您的帮助不大,因此只需安装 paramiko 模块并将它用于 Python 中的所有远程 SSH/SFTP 需求。在您的情况下,应该这样做:

import pandas as pd
import paramiko

ssh = paramiko.SSHClient()  # start the client
ssh.load_system_host_keys()  # load local host keys
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # add the host keys automatically
ssh.connect("192.168.1.51", 22, "lucy", "your_password")  # replace the password with yours

sftp = ssh.open_sftp()  # start a SFTP session
# 'open' the remote file, adjust the path based on your home path (or use an absolute path)
target = sftp.open("media/lucy/hdd1/hdf_row/Archive1/newrow_data_copy.h5")

更新:但这就是您只能获取远程文件句柄的方式(您可以对本地文件进行流式传输、搜索和执行任何其他操作),遗憾的是再看一眼 - HDFStore 需要一个文件路径并通过 PyTables 执行所有文件处理,所以除非你想破解 PyTables 来处理远程数据(而且你不t) 你最好的选择是安装 sshfs 并将远程文件系统挂载到本地文件系统,然后让 Pandas 将远程文件视为本地文件,例如:

sshfs lucy@192.168.1.51:media/lucy/hdd1 ~/hdf

然后在 Python 中:

import os
import pandas as pd

store1 = pd.HDFStore(os.path.expanduser("~/hdf/hdf_row/Archive1/newrow_data_copy.h5"))

文件不会直接下载,除非指示 PyTables 存储文件而不是在内存中读取文件。

关于python - 从远程读取 h5 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45144080/

相关文章:

python - Django 按日期排序(天)

windows - 在 Windows 上使用 SSH 的 Git

linux - centos6.5中的HostKey算法

bash - 如何杀死多台计算机上某个用户的所有进程?

php - PHP SSH检测流的结尾

python - 如何覆盖 Django-CMS 模板

python - 计算python中两个向量之间的角度

python - 从文本文件到市场矩阵格式

python - 如何打印整数范围之间的字符串 - Python 3

SSH 失败,错误代码 "no error"