我知道您正在寻找使用FTPlib的代码.我没有一个可以展示这个例子的ftp服务器,但我可以提供一些帮助.
您可以使用递归函数的概念;即调用自身的函数.
这很简单,用os.listdir()
扫描一个文件夹,然后判断它是否是一个文件夹,如果是,那么调用相同的函数来执行相同的操作,并将其添加到词典中.
下面是一个简单的例子(不带ftp):
import os
dictionary = {}
path = "C:/Users/User/Desktop/SomeFile"
def is_dictionary(path):
try:
os.chdir(path)
return True
except:
return False
def RecursiveFunc(data, path):
f = os.listdir(path)
if f != {}:
for i in f:
if is_dictionary(f"{path}/{i}"):
if os.listdir(f"{path}/{i}") != []:
data[i] = {}
RecursiveFunc(data[i], f"{path}/{i}")
else:
data[i] = 'Empty'
RecursiveFunc(dictionary, path)
print(str(dictionary))
您只需对FTPlib库执行同样的操作.您可以使用FTP.cwd()
从一个字典移动到另一个字典,使用FTP.nlst()
列出该字典中的所有文件,然后调用递归函数对文件中的文件执行相同的工作.
输出:
{'subfolder1': {'sub-subfolder1': 'Empty', 'sub-subfolder2': 'Empty', 'sub-subfolder3': 'Empty'},
{'subfolder2': {'sub-subfolder1': 'Empty'},
{'subfolder3': {'sub-subfolder1': 'Empty', 'sub-subfolder2': 'Empty'}}
EDIT个
我编写的代码几乎与您想要的输出完全相似.
它是这样的:
import os
dictionary = []
path = "C:/Users/User/Desktop/MyFolder"
def is_dic(path):
try:
os.chdir(path)
return True
except:
return False
def RecursiveFunc(data, path):
f = os.listdir(path)
index = 0
for i in f:
if is_dic(f"{path}/{i}"):
if os.listdir(f"{path}/{i}") == []:
data.append(str(i))
else:
data.append({i: []})
RecursiveFunc(data[index][i], f"{path}/{i}" )
index += 1
RecursiveFunc(dictionary, path)
print(str(dictionary))
输出:
[{'subfolder1': ['sub-subfolder1', 'sub-subfolder2', 'sub-subfolder3']},
{'subfolder2': ['sub-subfolder1']},
{'subfolder3': ['sub-subfolder1', 'sub-subfolder2']}]