2016-03-31 19 views
6

possiamo scrivere un semplice get come questo:Specificare modello file in pysftp ottenere

import pysftp 

hostname = "somehost" 
user = "bob"  
password = "123456" 
filename = 'somefile.txt' 

with pysftp.Connection(hostname, username=user, private_key='/home/private_key_file') as sftp: 
    sftp.get(filename) 

Tuttavia, voglio specificare un modello nel nome del file, qualcosa come: '*.txt'

Qualche idea su come fai questo usando pysftp?

+0

E poi? 'Get' può solo restituire un file ... – RickyA

+0

Penso che sia necessario ottenere l'elenco dei file in una directory; correre su di loro e vedere se corrispondono al modello. Se lo fanno, allora esegui il 'get'. – RickyA

+0

Giusto, così invece di ottenere potrebbe essere necessario qualche altra funzione, OPPURE un modo per elencare i file di uno specifico pattern, su cui posso scorrere e chiamare get –

risposta

3

Non c'è alcuna funzione per scaricare i file che corrispondono a una maschera di file in pysftp.

Dovete:

  • lista directory, utilizzando listdir o walktree (se avete bisogno di ricorsione)
  • iterare l'elenco dei file, filtrare i file che si desidera
  • chiamata get individualmente per ogni .

Per una fonte d'ispirazione, vedere come get_d o get_r (ricorsiva) sono implementati.

1

Può confermare dopo aver esaminato la documentazione che non è possibile elencare utilizzando un modello. Così ho fatto qualcosa di simile:

import pysftp 
import re 

pysftp.Connection(host=FTP_HOST, 
        username=FTP_USERNAME, 
        password=FTP_PASSWORD) 
    server.cwd(self.FILES_PATH) 
    filelist = server.listdir() 

    for filename in filelist: 
     filedate = re.search(".*\.txt$", filename) 
     if filedate: 
      print "FOUND FILE " + filename 
+0

ottenuto" IndentationError: indent inaspettato "su questo –

0
import pysftp 
import sys 

[...] 

dn = datetime.now().strftime("%Y%m%d%H"); 
with pysftp.Connection(myHost, myUsername, password=myPassword) as sftp: 
    myFileList = sftp.listdir("files/") 
    for filename in myFileList: 
     if (filename.rfind("ArrivalList_" + dn) != -1): 
      sftp.get("files/" + filename, "/tmp/" + filename) 
Problemi correlati