PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Leggi i file CSV/Excel dal file SFTP, apporta alcune modifiche a quei file utilizzando Pandas e salva di nuovo

Hai completato la parte di download.

Per la parte di caricamento, vedere Come trasferire Pandas DataFrame in .csv su SFTP utilizzando Paramiko Library in Python? – Anche se è per Paramiko, pysftp Connection.open metodo si comporta in modo identico a Paramiko SFTPClient.open , quindi il codice è lo stesso.

Il codice completo può essere come:

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

Quanto sopra aggiorna lo stesso file. Se vuoi caricare su un file diverso, usa questo:

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

Ai fini di bufsize , vedi:
La scrittura su un file sul server SFTP aperto utilizzando il metodo pysftp "open" è lenta

Avviso obbligatorio:non impostare cnopts.hostkeys = None , a meno che non ti interessi la sicurezza. Per la soluzione corretta, vedere Verifica chiave host con pysftp .