sql >> Base de Datos >  >> RDS >> PostgreSQL

Lea archivos CSV/Excel desde un archivo SFTP, realice algunos cambios en esos archivos usando Pandas y guárdelos

Tienes la parte de descarga hecha.

Para la parte de carga, consulte ¿Cómo transferir Pandas DataFrame a .csv en SFTP usando Paramiko Library en Python? – Si bien es para Paramiko, pysftp Connection.open método se comporta de forma idéntica a Paramiko SFTPClient.open , por lo que el código es el mismo.

El código completo puede 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())

Lo anterior actualiza el mismo archivo. Si desea cargar a un archivo diferente, use esto:

# 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)

Con el propósito de bufsize , consulte:
Escribir en un archivo en el servidor SFTP abierto con el método pysftp "open" es lento

Advertencia obligatoria:no establezca cnopts.hostkeys = None , a menos que no te importe la seguridad. Para conocer la solución correcta, consulte Verificar clave de host con pysftp .