我需要通过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')
答案 0 :(得分:0)
这对我有用:
import paramiko
import pandas as pd
host = "your_host.com"
port = your_port
transport = paramiko.Transport((host, port))
transport.connect(username = user_id, password = password)
sftp = paramiko.SFTPClient.from_transport(transport)
with sftp.open(path_to_file, "r") as file:
df = pd.read_sas(file, format ='sas7bdat', encoding = 'latin1')
您可能需要调整编码,但 latin1 是 SAS 标准。