Чтение CSV-файла в память с SFTP-сервера с использованием Python Paramiko - PullRequest
1 голос
/ 18 июня 2019

Я пытаюсь прочитать файл CSV на SFTP в моей памяти Python. Я попробовал следующее, которое отлично работает для FTP-соединения, но не для SFTP.

Например, я хочу повторить:

df = pd.read_csv(...)

Но не сохраняя его сначала локально (причина в том, что я хочу запустить его как облачную функцию, а затем не хочу, чтобы локальные файлы были в моем кэше).

Как я могу сделать это по-другому?

def read_file_sftp_local_memory(sftp, path, filename):

    flo = BytesIO()
    path_query = "".join(['RETR ', path, '/', filename])
    sftp.retrbinary(path_query, flo.write)
    flo.seek(0)
    return flo

Я пробовал также следующее:

def read_file_csv(sftp, path, filename):

    # Download
    sftp.get("/".join( os.path.join(path, filename) ), filename)

    # Read
    df = pd.read_csv(filename)

    # Delete
    os.remove(filename)

    # Return
    return df

Но это вернулось:

Ошибка:

raise IOError(text)
OSError: Failure

1 Ответ

1 голос
/ 18 июня 2019

Предполагая, что вы используете библиотеку Paramiko SFTP, используйте SFTPClient.open метод :

f = sftp.open(path)
df = pd.read_csv(f)
f.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...