2016-03-31 16 views
6

Chúng tôi có thể viết một đơn giản get như thế này:Xác định mô hình tập tin trong pysftp được

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) 

Tuy nhiên, tôi muốn chỉ định một mô hình trong tên tập tin, một cái gì đó như: '*.txt'

Bất kỳ ý tưởng về làm thế nào để làm điều này bằng cách sử dụng pysftp?

+0

Và sau đó? 'Get' chỉ có thể trả lại một tệp ... – RickyA

+0

Tôi nghĩ bạn cần lấy danh sách tệp trong thư mục; chạy qua chúng và xem chúng có khớp với mẫu của bạn hay không. Nếu họ làm sau đó làm 'get'. – RickyA

+0

Phải, vì vậy thay vì tôi có thể cần một số chức năng khác, HOẶC một cách để liệt kê các tệp của một mẫu cụ thể, qua đó tôi có thể lặp lại và gọi số –

Trả lời

3

Không có chức năng tải xuống tệp phù hợp với mặt nạ tệp trong pysftp.

Bạn cần phải:

  • danh sách các thư mục, sử dụng listdir hoặc walktree (nếu bạn cần đệ quy)
  • lặp danh sách các tập tin, chọn lọc các tập tin bạn muốn
  • gọi get riêng cho mỗi .

Đối với một nguồn cảm hứng, xem làm thế nào get_d hoặc get_r (recursive) được thực hiện.

1

Có thể xác nhận sau khi trải qua tài liệu mà bạn không thể liệt kê bằng mẫu. Vì vậy, tôi đã làm một cái gì đó như thế này:

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

có" IndentationError: indent bất ngờ "về điều này –

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) 
Các vấn đề liên quan