如何用python中怎么把文件目录输出为字典
问题描述:
现在有一个文件目录如下:
path = r'D:\test'
cmd --> tree D:\test /f
D:\TEST
├─1
│ ├─1
│ │ 1.txt
│ │ 2.txt
│ │ 3.txt
│ │
│ ├─2
│ └─3
│ 1.bmp
│
├─2
│ 1.docx
│
└─3
现在就是想用python递归文件夹,将这个文件目录转为dict类型,如下:
path_dict = {'D:\\test\\1': {'D:\\test\\1\\1': ['D:\\test\\1\\1\\1.txt','D:\\test\\1\\1\\2.txt','D:\\test\\1\\1\\3.txt',],'D:\\test\\1\\2': [],'D:\\test\\1\\3': ['D:\\test\\1\\3\\1.bmp'],},'D:\\test\\2': ['D:\\test\\2\\1.docx'],'D:\\test\\3': []}
from pathlib import Path
result = []
def scan_file(path):
result = {}
dirList = [str(x) for x in Path(path).iterdir() if x.is_dir()]
for v in dirList:
# Path('.').glob('*.jpg') 不使用递归
result[v] = [str(i) for i in Path(v).glob('**/*.*')]
return result
上面的代码虽然可以做到,但目录下的空文件夹不见了,想尽可能让下面树形输出的目录跟文件资源管理器看到的一样
并且可以用以下代码:
print(json.dumps(path_dict, indent=4, ensure_ascii=False))
将path_dict输出成:
{
'D:\\test\\1': {
'D:\\test\\1\\1': [
'D:\\test\\1\\1\\1.txt',
'D:\\test\\1\\1\\2.txt',
'D:\\test\\1\\1\\3.txt',
],
'D:\\test\\1\\2': [],
'D:\\test\\1\\3': [
'D:\\test\\1\\3\\1.bmp'
],
},
'D:\\test\\2': [
'D:\\test\\2\\1.docx'
],
'D:\\test\\3': []
}
谢谢了。
答
如果不用 os.walk, 用你的代码的方式,可以这样,list 和 dict 的互相嵌套导致 file 和 dir 的表示结构稍微有点不同,当然也可以让 file 的表示不只是用 string ,也用 dict 来携带更多信息,这取决于你的需求:
from pathlib import Path
import os
import json
def scan_file(path):
items = Path(path).iterdir()
subFiles = []
subDirs = {}
for item in items:
v = str(item)
if item.is_dir():
subResult = scan_file(item)
subDirs[v] = subResult
else:
subFiles.append(v)
if len(subDirs)>0:
subFiles.append(subDirs)
return subFiles
result = scan_file(".")
print(print(json.dumps(result, indent=4, ensure_ascii=False)))