【问题标题】:Reading SAS files on a remote server读取远程服务器上的 SAS 文件
【发布时间】: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会更好吗?
  • 我不想在本地下载文件。这些可能很大,因此此方法需要很长时间。
  • 有什么区别?即使您远程打开文件,它也必须在本地传输文件,因为您的进程是本地的。
  • 您的回复帮助我实际调试了这个。感谢您的帮助!

标签: python paramiko


【解决方案1】:

这对我有用:

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

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 2021-02-23
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 2021-06-27
    • 2010-10-13
    • 1970-01-01
    • 2016-10-19
    相关资源
    最近更新 更多