我刚开始使用Python的pysftp,我很困惑如何称之为walktree
函数。
我发现了一些代码(在http://pydoc.net/Python/pysftp/0.2.8/pysftp/上找到),这些代码帮助我更好地理解了我的参数应采用的形式
def walktree(self, remotepath, fcallback, dcallback, ucallback, recurse=True):
'''recursively descend, depth first, the directory tree rooted at
remotepath, calling discreet callback functions for each regular file,
directory and unknown file type.
:param str remotepath:
root of remote directory to descend, use '.' to start at
:attr:`.pwd`
:param callable fcallback:
callback function to invoke for a regular file.
(form: ``func(str)``)
:param callable dcallback:
callback function to invoke for a directory. (form: ``func(str)``)
:param callable ucallback:
callback function to invoke for an unknown file type.
(form: ``func(str)``)
:param bool recurse: *Default: True* - should it recurse
:returns: None
但我仍然对“调用常规文件,目录和未知文件类型的回调函数”的确切含义感到困惑。
我还浏览了官方文档:https://media.readthedocs.org/pdf/pysftp/latest/pysftp.pdf
但它告诉我有关walktree()
功能的全部内容:
是一种强大的方法,可以递归(默认)遍历远程目录结构,并为它遇到的每个文件,目录或未知实体调用用户提供的回调函数。它用于pysxp的
get_x
方法,可以很好地用于自己的出价。每个回调都提供实体的路径名。 (形式:func(str)
)
我觉得没有给我很多关于如何正确调用它的信息。
如果有人可以提供一个正确调用此函数的示例,并解释为什么要传递您选择的参数,那将非常感谢!
以下是您要查找的示例代码。
import pysftp
file_names = []
dir_names = []
un_name = []
def store_files_name(fname):
file_names.append(fname)
def store_dir_name(dirname):
dir_names.append(dirname)
def store_other_file_types(name):
un_name.append(name)
cnopts = pysftp.CnOpts()
cnopts.hostkeys = None
sftp = pysftp.Connection(host="Your_ftp_server_name", username="ftp_username", private_key="location_of_privatekey", cnopts=cnopts)
sftp.walktree("/location_name/",store_files_name,store_dir_name,store_other_file_types,recurse=True)
print file_names,dir_names,un_name
文件名,目录名和未知文件类型分别存储在列表file_names
,dir_names
和un_name
中。
了解什么是the callback,如果这是实际问题。
对于walktree
的所有三个参数,您需要传递对带有单个字符串参数的函数的引用。当walktree
递归目录结构时,它会为它找到的每个文件系统对象“回调”其中一个函数,将路径作为(字符串)参数传递给对象。
通常,您需要一些函数实现的状态(上下文)。即对容器的引用,用于存储找到的路径。为了避免使用全局变量,您在问题中引用的pysftp示例传递了辅助类而不是普通函数的方法,将状态(flist
,dlist
和ulist
容器)保存在对象实例中。