在python代码中使用os模块时处理远程文件夹?

时间:2018-06-11 10:19:02

标签: python sftp

我编写了一个小程序,广泛使用os模块,特别是os.walkos.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.walkos.removeshutil.move的详细信息提供?如果我不能,那么我将不得不重写程序,这不是我想要的。

PS:此问题的目标是了解如何使用相同代码来处理远程文件夹。像paramiko这样的工具处理实现细节(比如文件的位置等),所以我们必须重新编写程序。在本地安装远程文件以及使用os的能力的想法非常好而且功能强大。

2 个答案:

答案 0 :(得分:3)

很抱歉让你失望,但情况确实与你在问题中描述的完全一样:

是的,如果您想使用os.walkos.removeshutil.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)