大家好,我是了不起。
我們經常需要從linux伺服器上同步檔,但是xftp等工具都需要註冊了,這裏用免費的python程式碼來下載檔,還可以擴充套件更多的自訂用法。
準備工作
本文需要使用paramiko庫,可以使用以下命令進行安裝:
pip install paramiko
下載檔
先建立一個SSHClient物件,並設定缺失主機金鑰的策略為自動添加,然後使用connect方法連線到伺服器。需要提供伺服器IP地址、埠號、使用者名稱和密碼。連線成功後,開啟SFTP通道,使用open_sftp方法建立SFTP物件。SFTP是SSH協定的一部份,用於在伺服器和本地之間傳輸檔。使用SFTP物件的open方法開啟要下載的遠端檔,並指定開啟模式為唯讀。假設要下載的檔是UTF-8編碼的文字檔案,進行編碼轉換。下面是一個使用paramiko庫從Linux伺服器上下載檔的範例程式碼:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='your_server_ip', port=22, username='your_username', password='your_password')
sftp = ssh.open_sftp()
remote_file = sftp.open('/path/to/remote/file', 'r')
remote_file.read().decode('utf-8').encode('gbk')
在上面的程式碼中,將your_server_ip替換為您的Linux伺服器的IP地址,your_username替換為使用者名稱,your_password替換為密碼,/path/to/remote/file替換為要下載的遠端檔的路徑,/path/to/local/file替換為要保存的本地檔的路徑。
保存檔
在本地建立一個檔物件,使用open方法開啟,指定寫入模式,並將遠端檔的內容寫入本地檔。最後,關閉所有的檔物件、SFTP物件和SSH連線。
local_file.write(remote_file.read().decode('utf-8'))
remote_file.close()
local_file.close()
sftp.close()
ssh.close()
檔是否存在
為了保證每次下載都是最新,如果存在就刪除後建立新檔,如果不存在就建立新檔。
# 檢查檔是否存在,如果不存在則建立
if not os.path.exists('/path/to/local/file'):
with open('/path/to/local/file', 'w') as f:
pass # 建立空檔
# 開啟本地檔,指定追加模式
local_file = open('/path/to/local/file', 'a')
使用os.path.exists函式檢查檔是否存在,如果不存在則建立空檔。在開啟本地檔時,指定模式為追加模式('a'),這樣可以在已有內容的基礎上追加新內容。
由於windows中檔是行程獨占,可能未釋放,會報錯:
os.remove(local_path)
PermissionError: [WinError 32] 另一個程式正在使用此檔,行程無法存取。
可以使用檔物件的truncate()方法。該方法將檔截斷為指定的大小,若檔大小為零,所有內容都將被刪除。
with open('file.txt', 'w') as file:
file.truncate(0)
使用with語句開啟檔file.txt,並將檔物件分配給變量file,呼叫truncate(0)方法以將檔截斷為零,刪除檔中的所有內容。此方法僅適用於文字檔案。如果要清除二進制檔的內容,可以使用類似的方法,但是需要將檔物件開啟為二進制模式(例如'wb')。
PS : Python都知道技術交流群(技術交流、摸魚、白嫖課程為主)又不定時開放了,感興趣的朋友,可以在下方公號內回復: 666 ,即可進入。
老規矩 ,道友們還記得麽, 右下角的 「在看」 點一下 , 如果感覺文章內容不錯的話,記得分享朋友圈讓更多的人知道!