我們經常需要從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')。
本文鏈接:http://www.tebozhan.com/showinfo-26-95150-0.html用 Python 代替 xftp 從 Linux 服務器下載文件
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
下一篇: 用了這個庫,命令行再也不黑不溜秋了