我有一个问题,我不能从我的服务器读取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说错了,预期字符串
store1 = pd.HDFStore('//192.168.1.51/media/lucy/hdd1/hdf_row/Archive1/newrow_data_copy.h5', mode='r')错误:文件不存在。不过,我看到了服务器上的文件。
有什么问题,我应该如何从远程服务器读取h5文件。我不能下载,因为文件很大。
发布于 2017-07-17 12:32:45
您知道,从定义上讲,读取整个远程文件就是下载,对吗?是否将文件下载到工作内存或磁盘是一个完全不同的问题。
尽管如此,除非您愿意编写自己的tty仿真器,否则ssh和scp都不会对您有多大帮助,所以只需安装paramiko模块并使用它满足您的远程SSH/SFTP在Python中的所有需要。就你的情况而言,这应该可以做到:
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")UPDATE:但这就是您只能获得远程文件句柄的方式(您可以对本地文件进行流、查找和任何其他操作),遗憾的是,HDFStore期待文件的路径并通过PyTables执行所有文件处理,因此,除非您想黑PyTables来处理远程数据(而不是),最好的方法是安装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被指示存储该文件而不是在内存中读取它。
https://stackoverflow.com/questions/45144080
复制相似问题