EDIT: I want to calculate each folder size not just entire dropbox size... My code is working fine for whole dropbox size

编辑:我想计算每个文件夹大小而不仅仅是整个保管箱大小...我的代码适用于整个保管箱大小

I am having difficulty in calculating each folder size of dropbox using python api as dropbox returns folder size as zero

我很难使用python api计算dropbox的每个文件夹大小,因为dropbox将文件夹大小返回为零

here's my code so far but it's giving me wrong answer

这是我的代码到目前为止,但它给了我错误的答案

  def main(dp_path):
   a=  client.metadata(dp_path)
   size_local = 0
   for x in a['contents']:
     if x['is_dir']==False:
       global size
       size += int(x['bytes'])
       size_local += int(x['bytes'])

       #print "Total size so far :"+str(size/(1024.00*1024.00))+" Mb..." 


     if x['is_dir']==True:
       a = main(str(x['path']))
       print str(x['path'])+" size=="+str(a/(1024.00*1024.00))+" Mb..."

     return size_local+size


 if __name__ == '__main__':
   global size
   size=0
   main('/')
   print str(size/(1024.00*1024.00))+" Mb" 

1 个解决方案

#1


4

EDIT 2: It seems I misunderstood the question. Here's code that prints out the sizes of each folder (in order of decreasing size):

编辑2:我似乎误解了这个问题。这里的代码打印出每个文件夹的大小(按大小减小的顺序):

from dropbox.client import DropboxClient
from collections import defaultdict

client = DropboxClient('<YOUR ACCESS TOKEN>')

sizes = {}
cursor = None
while cursor is None or result['has_more']:
    result = client.delta(cursor)
    for path, metadata in result['entries']:
        sizes[path] = metadata['bytes'] if metadata else 0
    cursor = result['cursor']

foldersizes = defaultdict(lambda: 0)
for path, size in sizes.items():
    segments = path.split('/')
    for i in range(1, len(segments)):
        folder = '/'.join(segments[:i])
        if folder == '': folder = '/'
        foldersizes[folder] += size

for folder in reversed(sorted(foldersizes.keys(), key=lambda x: foldersizes[x])):
    print '%s: %d' % (folder, foldersizes[folder])

EDIT: I had a major bug in the second code snippet (the delta one), and I've now tested all three and found them all to report the same number.

编辑:我在第二个代码片段(delta delta)中有一个主要错误,我现在已经测试了所有三个并发现它们全部报告相同的数字。

This works:

这有效:

from dropbox.client import DropboxClient

client = DropboxClient('<YOUR ACCESS TOKEN>')

def size(path):
    return sum(
        f['bytes'] if not f['is_dir'] else size(f['path'])
        for f in client.metadata(path)['contents']
    )

print size('/')

But it's much more efficient to use /delta:

但使用/ delta效率更高:

sizes = {}
cursor = None
while cursor is None or result['has_more']:
    result = client.delta(cursor)
    for path, metadata in result['entries']:
        sizes[path] = metadata['bytes'] if metadata else 0
    cursor = result['cursor']

print sum(sizes.values())

And if you truly just need to know the overall usage for the account, you can just do this:

如果您真的需要知道帐户的整体使用情况,您可以这样做:

quota_info = client.account_info()['quota_info']
print quota_info['normal'] + quota_info['shared']

更多相关文章

  1. Django i18n:为{% blocktrans %}块推荐的大小和格式?
  2. CentOS7.2 通过nfs设置共享文件夹
  3. linux下touch命令也可以一次创建多个文件和mkdir一次创建多个文
  4. 我应该在哪里添加Yocto位烤任务来创建工作文件夹符号链接?
  5. 获取Linux 内存页大小的命令
  6. Linux系统下查看目录大小
  7. Linux 删除文件夹和文件的命令
  8. Linux源码包里有个scripts文件夹,里面放的东西起什么作用?
  9. 通过排除其父文件夹为多个目录创建单个tar文件

随机推荐

  1. android迁移到androidx问题解决
  2. Android 进阶16:IntentService 使用及源码
  3. Android(安卓)6.0 移除HttpClient
  4. android通话流程浅析RIL层
  5. Android签名验证漏洞POC及验证
  6. Android UI开发第十七篇——Android Frag
  7. Android(安卓)activity 在AndroidMainAct
  8. android 开源项目:
  9. Android单位转换工具类
  10. android listen app package change, con