读取远程服务器上的SAS文件

时间:2016-06-10 01:19:51

标签: python paramiko

我需要通过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')

1 个答案:

答案 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 标准。