我编写了一个小程序,广泛使用os
模块,特别是os.walk
,os.remove
等。例如,
def dump_folder(source, destination):
"""
"""
# uses os.walk, shutil.move
def encrypt_folder(folder, recipient):
"""
"""
# uses os.walk, os.remove
现在,我想扩展此程序以支持SFTP
个文件夹。
我是否需要在本地安装文件夹才能使os.*
正常工作?例如,在Windows中,我可以使用win32net
并执行以下操作:
try:
win32wnet.WNetAddConnection2(...drive, remote...)
except:
pass
如果我要使用像paramiko
这样的工具,我是否可以使用相同的代码,而不必担心os.walk
,os.remove
,shutil.move
的详细信息提供?如果我不能,那么我将不得不重写程序,这不是我想要的。
PS:此问题的目标是了解如何使用相同代码来处理远程文件夹。像paramiko
这样的工具处理实现细节(比如文件的位置等),所以我们必须重新编写程序。在本地安装远程文件以及使用os
的能力的想法非常好而且功能强大。
答案 0 :(得分:3)
很抱歉让你失望,但情况确实与你在问题中描述的完全一样:
是的,如果您想使用os.walk
,os.remove
,shutil.move
等,则需要安装远程目录。
如果您使用专用的SFTP库,例如paramiko
(或通过subprocess
模块调用ssh / sftp),则必须自行实现os.walk
的功能
顺便说一下,如果您决定在os.walk
之上实施自己的paramiko
,则可能需要将该功能提交回paramiko
,因为它可能对其他人有帮助该图书馆的用户也是。
答案 1 :(得分:1)
正如@vog的答案所说,除非您将远程文件系统挂载到本地系统,否则不能将os.*
函数用于SFTP。
唯一的另一种方法是使用一些Python SFTP客户端库。
有pysftp library,这是Paramiko图书馆周围更加Pytonish的包装。 pysftp有walktree
method:
walktree(remotepath, fcallback, dcallback, ucallback, recurse=True)