从远程读取h5文件

Her*_*Guy 2 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"))
Run Code Online (Sandbox Code Playgroud)

错误是预期的字节,得到了int.另外os.system说错了,期望的字符串

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

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

什么是错的,我该怎么做才能从远程服务器读取h5文件.我无法下载,因为文件足够大.

zwe*_*wer 5

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

话虽这么说,无论是sshscp不会帮助你太多,除非你愿意写自己的tty模拟器,因此而不仅仅是安装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")
Run Code Online (Sandbox Code Playgroud)

更新:但这就是你如何只得到一个远程文件句柄(你可以流式传输,搜索并对你的本地文件做任何其他事情),遗憾的是第二次看 - HDFStore期望文件的路径并执行所有文件处理PyTables因此,除非你想破解PyTables使用远程数据(你没有),最好的办法是将sshfs远程文件系统安装并挂载到本地,然后让Pandas将远程文件视为本地文件,例如:

sshfs lucy@192.168.1.51:media/lucy/hdd1 ~/hdf
Run Code Online (Sandbox Code Playgroud)

然后在Python中:

import os
import pandas as pd

store1 = pd.HDFStore(os.path.expanduser("~/hdf/hdf_row/Archive1/newrow_data_copy.h5"))
Run Code Online (Sandbox Code Playgroud)

除非PyTables被指示存储文件而不是在内存中读取文件,否则不会直接下载该文件.