[英]How to create a Python nested dictionary based on a FTP tree of folders
我正在尝试基于位于 FTP 服务器上的文件夹树创建字典(见下图):
我正在寻找的结果是:具有辅助字典(作为键)和一些列表(作为值)的主字典。
rootpath = r'C:\Users\_M92\Desktop\myFolder'
dict = {'subfolder1': ['sub-subfolder1', 'sub-subfolder2', 'sub-subfolder3']}, \
{'subfolder2': ['sub-subfolder1']}, \
{'subfolder3': ['sub-subfolder1', 'sub-subfolder2']}
我必须确切地说,子子文件夹最终可以在其中包含一些文件夹。
您对如何进行这种操作有什么建议吗?
有了@Elmatador DeAngel 的建议/答案,我们就足够接近了:
dict = {'subfolder1': {'sub-subfolder1': 'Empty', 'sub-subfolder2': 'Empty', 'sub-subfolder3': 'Empty'},\
'subfolder2': {'sub-subfolder1': 'Empty'}, \
'subfolder3': {'sub-subfolder1': 'Empty', 'sub-subfolder2': 'Empty'}}
我知道您正在寻找使用 FTPlib 的代码。 我没有 FTP 服务器来显示示例,但我可以提供一些帮助。
您可以使用递归 function 的概念; 一个调用自身的 function。
很简单,使用os.listdir()
扫描一个文件夹,然后检查它是否是一个文件夹,如果是,则调用相同的 function 进行相同的操作,并将其添加到字典中。
这是一个简单的例子(没有 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 库做同样的事情。 You can use FTP.cwd()
to move from a dictionary to another, and FTP.nlst()
to list all the files in said dictionary, and then call a recursive function to do the same job to the file inside the file.
Output:
{'subfolder1': {'sub-subfolder1': 'Empty', 'sub-subfolder2': 'Empty', 'sub-subfolder3': 'Empty'},
{'subfolder2': {'sub-subfolder1': 'Empty'},
{'subfolder3': {'sub-subfolder1': 'Empty', 'sub-subfolder2': 'Empty'}}
编辑
我编写的代码几乎与您想要的 output 非常相似。
这里是:
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))
Output:
[{'subfolder1': ['sub-subfolder1', 'sub-subfolder2', 'sub-subfolder3']},
{'subfolder2': ['sub-subfolder1']},
{'subfolder3': ['sub-subfolder1', 'sub-subfolder2']}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.