在 python 代码中使用 os 模块时处理远程文件夹?
Dealing with remote folders while using the os module in a python code?
我写了一个小程序,广泛使用了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
、[=23 的细节吗? =] 提供?如果我做不到,那么我将不得不大量重写程序,这不是我想要的。
PS:这个问题的目的是找出如何使用相同的代码来处理远程文件夹. paramiko
等工具处理实现细节(例如文件在哪里等),因此我们将不得不重新编写程序。在本地挂载远程文件的想法和使用 os
的能力真的很好很强大。
很抱歉让你失望了,但情况确实和你问题中描述的一模一样:
是的,如果您想使用 os.walk
、os.remove
、shutil.move
等,您确实需要挂载远程目录
如果您使用专门的 SFTP 库,例如 paramiko
(或通过 subprocess
模块调用 ssh/sftp),则必须实现 os.walk
靠自己。
顺便说一下,如果您决定在 paramiko
的基础上实现自己的 os.walk
,您可能希望将该功能回馈给 paramiko
,因为它可能会有所帮助也适用于该库的其他用户。
正如@vog 的回答已经说过的那样,您不能对 SFTP 使用 os.*
函数,除非您将远程文件系统挂载到本地文件系统。
唯一的其他方法是使用一些 Python SFTP 客户端库。
有pysftp library, which is a more Pytonish wrapper around Paramiko library. And pysftp has walktree
method:
walktree(remotepath, fcallback, dcallback, ucallback, recurse=True)
我写了一个小程序,广泛使用了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
、[=23 的细节吗? =] 提供?如果我做不到,那么我将不得不大量重写程序,这不是我想要的。
PS:这个问题的目的是找出如何使用相同的代码来处理远程文件夹. paramiko
等工具处理实现细节(例如文件在哪里等),因此我们将不得不重新编写程序。在本地挂载远程文件的想法和使用 os
的能力真的很好很强大。
很抱歉让你失望了,但情况确实和你问题中描述的一模一样:
是的,如果您想使用 os.walk
、os.remove
、shutil.move
等,您确实需要挂载远程目录
如果您使用专门的 SFTP 库,例如 paramiko
(或通过 subprocess
模块调用 ssh/sftp),则必须实现 os.walk
靠自己。
顺便说一下,如果您决定在 paramiko
的基础上实现自己的 os.walk
,您可能希望将该功能回馈给 paramiko
,因为它可能会有所帮助也适用于该库的其他用户。
正如@vog 的回答已经说过的那样,您不能对 SFTP 使用 os.*
函数,除非您将远程文件系统挂载到本地文件系统。
唯一的其他方法是使用一些 Python SFTP 客户端库。
有pysftp library, which is a more Pytonish wrapper around Paramiko library. And pysftp has walktree
method:
walktree(remotepath, fcallback, dcallback, ucallback, recurse=True)