sql >> Databasteknik >  >> RDS >> PostgreSQL

Läs CSV/Excel-filer från SFTP-fil, gör några ändringar i dessa filer med Pandas och spara tillbaka

Du har gjort nedladdningsdelen.

För uppladdningsdelen, se Hur överför man Pandas DataFrame till .csv på SFTP med Paramiko Library i Python? – Medan det är för Paramiko, pysftp Connection.open metod beter sig identiskt med Paramiko SFTPClient.open , så koden är densamma.

Hela koden kan vara så här:

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

Ovanstående uppdaterar samma fil. Om du vill ladda upp till en annan fil, använd denna:

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

För ändamålet bufsize , se:
Att skriva till en fil på SFTP-servern som öppnats med pysftp "öppen"-metoden är långsam

Obligatorisk varning:Ställ inte in cnopts.hostkeys = None , såvida du inte bryr dig om säkerhet. För rätt lösning se Verifiera värdnyckel med pysftp .



  1. Någon anledning att fortfarande använda ormfodral för databastabeller och kolumner?

  2. Markörbaserade poster i PostgreSQL

  3. Ruby on Rails 3 Kan inte ansluta till lokal MySQL-server via sockeln '/tmp/mysql.sock' på OSX

  4. Gruppera efter månad och returnera 0 om data inte hittas