Chu*_* Lu 4 python ssh sftp paramiko netcdf
我正在尝试远程读取 netcdf 文件。
我使用 Paramiko 包来读取我的文件,如下所示:
import paramiko
from netCDF4 import Dataset
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=’hostname’, username=’usrname’, password=’mypassword’)
sftp_client = client.open_sftp()
ncfile = sftp_client.open('mynetCDFfile')
b_ncfile = ncfile.read() # ****
nc = Dataset('test.nc', memory=b_ncfile)
Run Code Online (Sandbox Code Playgroud)
但是运行速度ncfile.read()非常慢。
所以我的问题是:有没有其他方法可以远程读取 netcdf 文件,或者有什么方法可以加快速度paramiko.sftp_file.SFTPFile.read()?
调用SFTPFile.prefetch应该会提高读取速度:
ncfile = sftp_client.open('mynetCDFfile')
ncfile.prefetch()
b_ncfile = ncfile.read()
Run Code Online (Sandbox Code Playgroud)
另一个选项是使用以下bufsize参数启用读取缓冲SFTPClient.open:
ncfile = sftp_client.open('mynetCDFfile', bufsize=32768)
b_ncfile = ncfile.read()
Run Code Online (Sandbox Code Playgroud)
(32768是 的值SFTPFile.MAX_REQUEST_SIZE)
同样对于写入/上传:
写入使用 pysftp "open" 方法打开的 SFTP 服务器上的文件很慢。
另一种选择是明确指定要读取的数据量(它使BufferedFile.read代码路径更有效):
ncfile = sftp_client.open('mynetCDFfile')
b_ncfile = ncfile.read(ncfile.stat().st_size)
Run Code Online (Sandbox Code Playgroud)
如果这些都不起作用,您可以将整个文件下载到内存中:
使用 pdfplumber 和 Paramiko 从 SFTP 服务器读取 PDF 文件
强制性警告:不要使用AutoAddPolicy这种方式 -这样做将失去对MITM 攻击的保护。有关正确的解决方案,请参阅Paramiko“未知服务器”。
| 归档时间: |
|
| 查看次数: |
4862 次 |
| 最近记录: |