我必须创建一个函数将示例1转换为示例2.我已经为示例1创建了一个函数。如何为示例2创建一个函数,使用嵌套读数并使用括号中的大小和换行符?
示例1。
{
'delo' : {
'navodila.docx' : 83273,
'poročilo.pdf' : 37653347,
},
'igre' : {},
'seznam.txt' : 7632,
'razno' : {
'slika.jpg' : 4275,
'prijatelji' : {
'janez.jpg' : 8734765,
}
示例2。
delo
navodila.docx (83273)
poročilo.pdf (37653347)
artikli.dat (253)
igre
seznam.txt (7632)
razno
slika.jpg (4275)
prijatelji
janez.jpg (8734765)
我的功能我已经为第一个例子做了,除了没有新行:
import os
def f(folder):
dict={}
list = os.listdir(folder)
for ts in list:
fullName = folder + '\\' + ts
if os.path.isfile(fullName):
size=os.path.getsize(fullname)
dict[ts]=size
else:
dict[ts]=f(fullName)
return (dict)
答案 0 :(得分:2)
def dump(d, level=0, indent=4):
for name in d:
if isinstance(d[name], dict):
print('{0}{1}'.format(' ' * level, name))
dump(d[name], level+indent)
else:
print('{0}{1} ({2})'.format(' ' * level, name, d[name]))
答案 1 :(得分:0)
我相信这会解决问题。主要思想是相同的,期望你必须递归地打印结构,记住缩进并在调用函数时传递它。
您的第一个代码版本需要一个小的修正,return语句的缩进是一个选项卡太大。此外,只有一个建议,列表和字典是变量名称的不良选择,因为它们已经构建在类型中。
import os
def f(folder):
mape={}
sez = os.listdir(folder)
for ts in sez:
# if ts == "." or ts == "..": continue
fullName = folder + '/' + ts
if os.path.isfile(fullName):
size=os.path.getsize(fullName)
mape[ts]=size
else:
mape[ts]=f(fullName)
return (mape)
struktura = f('.')
def output(tree, zam=0):
for i in tree:
if isinstance(tree[i], (int, long)):
print "{0}{1} ({2})".format(' '*zam*4, i, tree[i])
else:
print ' '*zam*4+i
output(tree[i],zam+1)
output(struktura)
当然,输出功能可以根据需要进行打印。 我希望这有助于解决你的问题。
PS:Kakšnečudnedomačenalogemate to?...答案 2 :(得分:0)
这就是我真正想要的,更简单的方法,只需重新填充
def f(map,n=0):
dictionary=beforeF(map) #function before i made
for key in dictionary.keys():
fullName = map + '\\' + key
if path.isdir(fullName):
print(n*'\t'+key+':')
f(fullName, n+1)
else:
print(n*'\t'+key + ' (' + str(dictionary[key])+ ')')