【发布时间】:2021-02-23 04:32:22
【问题描述】:
我需要通过 Python 读取远程服务器上的一些文件。我可以使用 paramiko 登录到这个远程服务器并获取一个文件对象(下面的变量 remote_file)。问题是这是一个 SAS 文件,因此编码不允许我一次读取一行。我需要使用 SAS7BDAT 包来读取这个文件。但是,sas7bdat 包仅接受文件路径或缓冲区作为输入。是否可以转换文件对象 (remote_file) 以便 sas7bdat 可以接受它?在这里感谢任何帮助!
我知道有一些解决方法可以解决这个问题(在远程服务器上安装 Python,将远程服务器上的文件移动到本地计算机)。但是,我不是在寻找这些解决方案。我在我的本地机器上安装了 SAS,并且我对远程机器拥有完全的写入权限。如果我可以将 SAS7BDAT 文件传输到远程桌面上的 CSV,然后读取 CSV 文件,那也适用于我。 (所有这些都应该通过 Python 完成)
使用 paramiko 包
import paramiko
from contextlib import contextmanager
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect('host name', username='username', password='password')
sftp_client = ssh_client.open_sftp()
remote_file = sftp_client.open('file path','r')
for line in remote_file: # fails here
print line # fails here
使用 SAS7BDAT 包
import sas7bdat
from sas7bdat import SAS7BDAT
f = SAS7BDAT('file_path_or_buffer')
【问题讨论】:
-
使用paramiko在本地下载文件并使用SAS7BDAT会更好吗?
-
我不想在本地下载文件。这些可能很大,因此此方法需要很长时间。
-
有什么区别?即使您远程打开文件,它也必须在本地传输文件,因为您的进程是本地的。
-
您的回复帮助我实际调试了这个。感谢您的帮助!