![](/img/trans.png)
[英]Downloading files using wildcard from SFTP server using Python Paramiko
[英]Unzip files on an SFTP server using Python
我在 SFTP 服務器上有一個 zip 文件。 我正在寫一個 AWS lambda function 並有 Paramiko 模塊連接到 SFTP 服務器。 我在下面編寫了解壓縮文件的代碼,並且代碼已成功執行,但文件未解壓縮。 有人可以幫助我出錯的地方或解壓縮服務器上文件的替代方法嗎?
to_sftp.chdir('<dir name>')
flo = BytesIO()
to_sftp.getfo('<dir name/filename.zip', flo)
flo.seek(0)
root = z.ZipFile(flo,'w')
print(root)
root.extractall(to_sftp.chdir('<dir name'))
ZipFile.extractall
無法將文件直接寫入 SFTP 服務器。 您必須將文件解壓縮到本地臨時文件夾。 然后一個一個上傳。
AWS Lambda 似乎在/tmp
中有一個臨時文件夾,就像常規的 *nix 服務器一樣。 請參閱我可以在 AWS Lambda Function 上存儲臨時文件嗎?
另一種選擇是使用ZipFile.infolist
或ZipFile.namelist
顯式迭代 ZIP 存檔中的所有文件,並使用ZipFile.open
和SFTPClient.putfo
將它們在內存中傳輸到 SFTP 服務器:
for i in root.infolist():
with root.open(i) as f:
to_sftp.putfo(f, "/remote/path/" + i.filename)
(未經測試,只是一個概念)
或者,如果您有 shell 訪問服務器,請直接在服務器上運行unzip
(或等效程序),以避免需要下載 ZIP 文件並上傳回提取的文件。
請注意,直接從 SFTP 服務器讀取 ZIP 存檔可能更有效:
with to_sftp.open('<dir name/filename.zip', bufsize=32768) as f:
root = z.ZipFile(f, 'r')
我還假設r
模式更適合您的任務。
對於bufsize=32768
的目的,請參閱Reading file opened with Python Paramiko SFTPClient.open method is slow 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.