跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 迫于 OneDrive 太卡,发现是自己文件数目太多了,写了一个 Python 程序显示当前目录下每个文件夹的个数
未分類
30 12 月 2020

迫于 OneDrive 太卡,发现是自己文件数目太多了,写了一个 Python 程序显示当前目录下每个文件夹的个数

迫于 OneDrive 太卡,发现是自己文件数目太多了,写了一个 Python 程序显示当前目录下每个文件夹的个数

資深大佬 : douglas1997 5

#!/usr/bin/env python  import os import argparse from collections import OrderedDict import json  listdironly = lambda d: [os.path.join(d, o) for o in os.listdir(d) if os.path.isdir(os.path.join(d, o))] listfileonly = lambda d: [os.path.join(d, f) for f in os.listdir(d) if os.path.isfile(os.path.join(d, f))]   def get_file_list_recursively(d):     # get all files and dirs     subfiles = listfileonly(d)     subdirs = listdironly(d)      if len(subdirs) == 0:         return subfiles     else:         for subd in subdirs:             # print (subd)             subfiles = subfiles + get_file_list_recursively(subd)         return subfiles  """ +-----------+---------+-------+------------+ |   Names   | Weights | Costs | Unit_Costs | +===========+=========+=======+============+ | bar       | 0.050   | 2     | 40         | +-----------+---------+-------+------------+ | chocolate | 0.100   | 5     | 50         | +-----------+---------+-------+------------+ | chips     | 0.250   | 3     | 12         | +-----------+---------+-------+------------+ OrderedDict{     'header': ['Names', 'Weights' ...],     'bar': [0.05, 2, 40 ...],     ... } """ def print_texttab(tab_kv):     import texttable as tt     tab = tt.Texttable()      for i, (k, v) in enumerate(tab_kv.items()):         if i == 0:             headings = tab_kv['header']             tab.header(headings)             tab.set_cols_align(["c"] * len(headings))         else:             if isinstance(v, (tuple, list)):                 row_data = [k] + v             else:                 row_data = [k, v]             tab.add_row(row_data)     tab_output = tab.draw()     print (tab_output)   def main(args):     curr_dirs = listdironly(args.dir)     count_dict = {os.path.basename(k):0 for k in curr_dirs}          for curr_d in curr_dirs:         curr_d_file_list = get_file_list_recursively(curr_d)         k_d = os.path.basename(curr_d)         count_dict[k_d] = len(curr_d_file_list)         count_rank = sorted(count_dict.items(), key=lambda x: x[1], reverse=True)      # create table     table_rank = OrderedDict()     table_rank['header'] = ['Directory', 'File Count']     for count_item in count_rank:         table_rank[count_item[0]] = count_item[1]      print_texttab(table_rank)    if __name__ == "__main__":     parser = argparse.ArgumentParser(description="Count files number.")     parser.add_argument('--dir', type=str, default='.')     args = parser.parse_args()     main(args) 

显示效果如下:

+----------------------+------------+ |      Directory       | File Count | +======================+============+ |         Apps         |   44254    | +----------------------+------------+ |       Pictures       |    2349    | +----------------------+------------+ 

就几行,我也懒得贴 gist 了 :)

大佬有話說 (5)

  • 資深大佬 : MakeItGreat

    如果你是 win 用户的话
    Powershell 更方便
    我就这样干的

  • 主 資深大佬 : douglas1997

    @MakeItGreat 好吧,python 可能更通用一些。

  • 資深大佬 : xmoiduts

    不懂就问:我的 onedrive 存了 20w+的中小文件(但仅为占位符),这会多占用很多电脑内存( RAM )吗?

  • 資深大佬 : qq316107934

    @xmoiduts #3 算个数,假设每个文件名为 100 字节,作为一个 key 存在一个 map 里,20w 文件名只占用 19M 左右的内存。

  • 主 資深大佬 : douglas1997

    @xmoiduts 不是占 RAM,是每一次启动的时候,Onedrive 会对比时间戳然后判断要不要更新。如果文件很多的话,容易导致电脑变得非常卡顿。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具