Python 如何记录文件夹?

Python 如何记录文件夹?,python,dictionary,nested,Python,Dictionary,Nested,我必须制作一个函数来将示例1转换为示例2。我已经为示例1创建了一个函数。如何创建一个函数,例如2,使用嵌套的读出器,并将其大小放在括号和换行符中 例1 { 'delo' : { 'navodila.docx' : 83273, 'poročilo.pdf' : 37653347, }, 'igre' : {}, 'seznam.txt' : 7632, 'razno' : {

我必须制作一个函数来将示例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)

我相信这会解决问题。其主要思想是相同的,期望您必须递归地打印结构,记住缩进并在调用函数时传递它

您的第一个版本的代码需要一个小的修正,return语句的缩进太大了。此外,只有advice、list和dict是变量名的糟糕选择,因为它们已经是内置类型

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čudne domače Naroge mate to?…

这是我真正想要的,一种更简单的方法,只是为了补充它

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])+ ')')

只是想澄清一下,您是否试图打印示例1中的dict,使输出看起来像示例2?@Lanaru我想是这样的……相关问题:这是我本周看到的第三个此类问题!必须是作业。@falsetru它是相关的,因为是同一个用户问的。但是这个“d”是什么?从f()返回的字典。使用dump as:dump(f('.'))我不工作,它返回“ValueError:zero-length字段名格式”。。。但我相信,韦恩·德拉、内维姆·扎卡吉、皮什值误差比萨姆·卡克斯内更容易造成纳洛基亚地区的价值误差。Ostevilct mors{}v print stavku,v pythonu 2.7在naprej pa jih ni treba。Torej:“{}{}({})”spremen v“{0}{1}({2})”PaBo delal。在东北部,东北部。。。
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])+ ')')