PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Leia arquivos CSV/Excel do arquivo SFTP, faça algumas alterações nesses arquivos usando Pandas e salve de volta


Você tem a parte de download feita.

Para a parte de upload, consulte How to Transfer Pandas DataFrame to .csv on SFTP using Paramiko Library in Python? – Enquanto é para Paramiko, pysftp Connection.open método se comporta de forma idêntica a Paramiko SFTPClient.open , então o código é o mesmo.

O código completo pode ser como:
with sftp.open("/remote/path/data.csv", "r+", bufsize=32768) as f:
    # Download CSV contents from SFTP to memory
    df = pd.read_csv(f)

    # Modify as you need (just an example)
    df.at[0, 'Name'] = 'changed'

    # Upload the in-memory data back to SFTP
    f.seek(0)
    df.to_csv(f, index=False)
    # Truncate the remote file in case the new version of the contents is smaller
    f.truncate(f.tell())

O acima atualiza o mesmo arquivo. Se você quiser fazer upload para um arquivo diferente, use isto:
# Download CSV contents from SFTP to memory
with sftp.open("/remote/path/source.csv", "r") as f:
    df = pd.read_csv(f)

# Modify as you need (just an example)
df.at[0, 'Name'] = 'changed'

# Upload the in-memory data back to SFTP
with sftp.open("/remote/path/target.csv", "w", bufsize=32768) as f:
    df.to_csv(f, index=False)

Para fins de bufsize , consulte:
Gravar em um arquivo no servidor SFTP aberto usando o método pysftp "open" é lento

Aviso obrigatório:Não defina cnopts.hostkeys = None , a menos que você não se preocupe com a segurança. Para obter a solução correta, consulte Verificar chave de host com pysftp .