python
  • sftp
  • pysftp
  • 2016-03-31 46 views 6 likes 
    6

    我們可以寫一個簡單的get這樣的:指定pysftp文件模式得到

    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) 
    

    不過,我想指定的文件名中的模式,像這樣:'*.txt'

    任何想法如何使用pysftp做這個?

    +0

    然後呢? 'Get'只能返回一個文件... – RickyA

    +0

    我認爲你需要得到一個目錄中的文件列表;跑過去看看它們是否符合你的模式。如果他們這樣做,然後做'獲取'。 – RickyA

    +0

    權,這樣反而得到我可能需要一些其他的功能,還是有辦法列出特定模式的文件,在這我可以迭代,並調用get –

    回答

    3

    沒有功能可以在pysftp中下載與文件掩碼匹配的文件。

    你必須:

    • 列表中的目錄,使用listdirwalktree(如果你需要遞歸)
    • 遍歷文件列表,過濾你想
    • 呼叫get文件單獨爲每個。

    對於一個啓發,看看如何get_dget_r(遞歸)被實現。

    1

    通過使用模式不能列出的文檔後可以確認。所以我做了這樣的事情:

    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

    得到「IndentationError:unexpected indent」on this –

    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) 
    
    相關問題