sql >> Databáze >  >> RDS >> PostgreSQL

Přečtěte si soubory CSV/Excel ze souboru SFTP, proveďte v těchto souborech nějaké změny pomocí Pandas a uložte je zpět

Máte hotovou část stahování.

Část týkající se nahrávání naleznete v části Jak přenést Pandas DataFrame do .csv na SFTP pomocí Paramiko Library v Pythonu? – I když je to pro Paramiko, pysftp Connection.open metoda se chová stejně jako Paramiko SFTPClient.open , takže kód je stejný.

Úplný kód může být takto:

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

Výše uvedené aktualizuje stejný soubor. Pokud chcete nahrát do jiného souboru, použijte toto:

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

Pro účely bufsize , viz:
Zápis do souboru na SFTP serveru otevřeného metodou pysftp "open" je pomalý

Povinné upozornění:Nenastavujte cnopts.hostkeys = None , pokud se nestaráte o bezpečnost. Správné řešení viz Ověření hostitelského klíče pomocí pysftp .



  1. Sloučit 2 tabulky pro dotaz SELECT?

  2. Zakažte přihlášení root v phpMyAdmin

  3. Metoda převodu. Zadanou metodu na typu nelze přeložit do výrazu úložiště LINQ to Entities

  4. Jak mohu přepsat tento dotaz, abych se vyhnul chybě:Nemůžete zadat cílovou tabulku pro aktualizaci v klauzuli FROM