列出存储中的所有项目(文件夹和文件)

时间:2020-09-24 08:57:09

标签: python python-3.x

我正在尝试列出具有O365 python库的OneDrive驱动器中的所有项目和子项目。

我的OneDrive的组织方式如下:

1:F: Clt
1:F: CltRoot
1:F: Documents
--2:F:clientDocs
--2:F:clt
---3:F:sub3
1:F: ID-Clt-Ctr
--2:F:Clt
---3:F:Clt
----4:F:Sub4
--2:F:Pieces
1:F: Pictures
1:f: Clt.txt
1:f: Getting started with OneDrive.pdf
1:f: text2.txt

f表示文件,F表示文件夹,数字是深度级别

使用此代码,我可以列出直到固定的子级别3

# 3 levels
items = my_drive.get_items() 
for item in items: 
    if (item.is_folder) : 
        print('1:F:',item.name) 
        for si in item.get_child_folders(): 
            if  (si.is_folder):
                print('2:F:'+si.name)
                for ssi in si.get_child_folders(): 
                    if  (ssi.is_folder):
                        print('3:F:'+ssi.name)
                    elif (ssi.is_file) :
                        print('3:f:',ssi.name)  
            elif (si.is_file) :
                print('2:f:',si.name)                  
    elif (item.is_file) :
        print('1:f:',item.name)  

我希望能够有一个代码,该代码将继续显示没有子级别限制的文件或文件夹(不显示sub4),继续的条件是测试项目是否为文件夹并且内容为子级通过item.get_child_folders()的文件夹

请问我该怎么做?

预先感谢

1 个答案:

答案 0 :(得分:0)

这是使您入门的代码。 (代码调用是从您的代码中复制的,我认为它们是正确的)。这应该可行,尽管它不会打印出目录级别(我将保留该功能供您实现)。

def print_dir(items):
  for item in items:
    print(item.name)
    if item.is_dir:
      # do stuff with directories
      print_dir(item.get_child_folders())     # this is the recursive call (step into dir)
    else:
      # do stuff with files
      pass

print_dir(my_drive.get_items())