1
我使用Paramiko通過sftp打開遠程文件。遠程文件有一個短語列表,我想循環遍歷文件的每一行,以查看給定的短語是否與遠程文件中的某一個匹配。回到sftp遠程文件的開始
代碼用來獲取遠程文件:
self.ssh = paramiko.SSHClient()
self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
self.ssh.connect(host, username=username, password=password)
self.sftp_client = self.ssh.open_sftp()
self.remote_file = self.sftp_client.open(remote_file_path, mode='rb')
def checkSubnet(self, phrase):
found = 0
for line in self.remote_file:
if phrase in line:
found = 1
print "FOUND IT"
break
return found
這將爲匹配的第一個詞的工作,但是如果要匹配的下一個短語是前一個文件之前,那麼就不會找到它。我已經調試過這個for循環,從之前在最後一場比賽中打破的地方開始。我的理解是它會在文件的頂部重新開始。
有沒有辦法改變這種行爲?或者甚至是一個更好的方法。該文件中有大約97,000個短語,並且每天都在更改,因此保留本地版本是不可能的。
感謝
嘗試堅持一個'self.remote_file.seek(0)'前'爲'循環回到開始。作爲一個附註,你可能應該以文本模式('mode ='r'')打開文件,而不是二進制文件,因爲你正在逐行讀取文件。從更大的角度來看,如果文件不是太大,可以考慮將整個內容讀入內存(無論是作爲一行數組還是一些解析的格式)以避免重複檢索。 – 2014-11-04 21:47:03
@AndrewMedico完美,謝謝!隨時發佈一個答案,我會接受它。 – DJDMorrison 2014-11-04 22:39:06