sql >> Database >  >> RDS >> PostgreSQL

Lees CSV/Excel-bestanden van het SFTP-bestand, breng enkele wijzigingen aan in die bestanden met Panda's en sla het terug op

Je hebt het downloadgedeelte gedaan.

Voor het uploadgedeelte, zie Hoe Pandas DataFrame over te zetten naar .csv op SFTP met behulp van Paramiko Library in Python? – Hoewel het voor Paramiko is, pysftp Connection.open methode gedraagt ​​zich identiek aan Paramiko SFTPClient.open , dus de code is hetzelfde.

Volledige code kan zijn als:

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

Het bovenstaande werkt hetzelfde bestand bij. Als je naar een ander bestand wilt uploaden, gebruik dan dit:

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

Ten behoeve van bufsize , zie:
Het schrijven naar een bestand op de SFTP-server die is geopend met de pysftp-methode "open" is traag

Verplichte waarschuwing:stel cnopts.hostkeys = None in , tenzij u niet om veiligheid geeft. Voor de juiste oplossing zie Hostsleutel verifiëren met pysftp .



  1. Een subtekenreeks extraheren in MySQL

  2. een kolom selecteren op basis van een minimumwaarde van een andere kolom

  3. Slaapstandprobleem:moet voorkomen in de GROUP BY-clausule of worden gebruikt in een aggregatiefunctie

  4. JOOQ genereert geen overbelaste procedures met tabelwaarde van PostgreSql