分享找某个目录里找 top N 大文件的 python 代码. - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
dbow
V2EX    Python

分享找某个目录里找 top N 大文件的 python 代码.

  •  
  •   dbow
    maliubiao 2014-09-17 10:12:00 +08:00 5176 次点击
    这是一个创建于 4117 天前的主题,其中的信息可能已经有所发展或是发生改变。
    代码:
    url://gist.github.com/maliubiao/44d9dc17869b4e5f9925

    使用方法:
    python travfs.py 目录 N, 不写N的话默认为前10大

    有时候下载的文件太多,随处丢找不到了,结果硬盘满了,可以用来找目标清理一下.
    试过Linux, Windows能正常使用, 其它的应该兼容。

    欢迎反馈
    33 条回复    2014-09-18 10:33:27 +08:00
    Lycnir
        1
    Lycnir  
       2014-09-17 10:32:20 +08:00
    提个建议 速度有待提升
    xvid73
        2
    xvid73  
       2014-09-17 10:36:21 +08:00
    感觉还要打目录比较麻烦,试试看下面这个能凑合不,列出当前文件夹下的 top10

    alias top10="du -chs *|sort -rh|head -11"
    dbow
        3
    dbow  
    OP
       2014-09-17 12:46:50 +08:00
    @Lycnir linux执行上80%时间消耗在posix_listdir上,这是个C函数,优化得引入C代码,就不能跨平台了。
    flyee
        4
    flyee  
       2014-09-17 13:13:30 +08:00   1
    insight
        5
    insight  
       2014-09-17 13:16:44 +08:00   1
    Windows Directory Statistics
    https://windirstat.info/
    dbow
        6
    dbow  
    OP
       2014-09-17 13:31:36 +08:00
    @flyee 赞,ncdu纯C写的非常快, 目录较深的话得多按几下。
    xjx0524
        7
    xjx0524  
       2014-09-17 13:32:24 +08:00
    我想看手机sd卡里存储文件大小,大多数软件不支持,有推荐的没?
    ChanneW
        8
    ChanneW  
       2014-09-17 13:36:07 +08:00
    不包含隐藏文件?
    dbow
        9
    dbow  
    OP
       2014-09-17 13:36:32 +08:00
    @xjx0524 挂载手机SD卡到电脑上,然后使用这个程序.
    hahastudio
        10
    hahastudio  
       2014-09-17 13:38:55 +08:00
    果然还是 sort 比 heapq.nlargest 快一些= =
    dbow
        11
    dbow  
    OP
    &nsp;  2014-09-17 13:39:34 +08:00
    @ChanneW 当然包含隐藏文件。
    ChanneW
        12
    ChanneW  
       2014-09-17 13:40:47 +08:00
    sort_files 排的太多了
    ChanneW
        13
    ChanneW  
       2014-09-17 13:42:07 +08:00
    @dbow
    ```
    if d.startswith("."):
    return
    ```
    dbow
        14
    dbow  
    OP
       2014-09-17 13:43:26 +08:00
    @ChanneW 这个对性能的影响可以忽略,主要还是python的posix_listdir C函数速度慢。
    dbow
        15
    dbow  
    OP
       2014-09-17 13:47:01 +08:00
    @ChanneW 这两句没影响,为了输出文件名时是绝对路径, 传参数的时候已经abspath过了.
    codeninja
        16
    codeninja  
       2014-09-17 13:51:38 +08:00 via Android
    ls -lSh | more 不就行了?
    dbow
        17
    dbow  
    OP
       2014-09-17 13:54:26 +08:00
    @codeninja travfs.py是遍历所有子目录的。
    ChanneW
        18
    ChanneW  
       2014-09-17 14:03:18 +08:00
    @dbow 那要这两句代码干什么?
    dbow
        19
    dbow  
    OP
       2014-09-17 14:06:28 +08:00
    @ChanneW 防止当做模块调用的时候,传过来一个相对路径。
    ChanneW
        20
    ChanneW  
       2014-09-17 14:14:10 +08:00
    @dbow 那模块调用的时候隐藏文件不就被忽略了?
    dbow
        21
    dbow  
    OP
       2014-09-17 14:20:12 +08:00
    @ChanneW 不会被忽略,你仔细想想.
    ChanneW
        22
    ChanneW  
       2014-09-17 14:21:30 +08:00
    @dbow 类型不对报错?
    ChanneW
        23
    ChanneW  
       2014-09-17 14:22:08 +08:00
    还是把 abspath 放进来好吧, 这样就统一了.
    xjx0524
        24
    xjx0524  
       2014-09-17 14:44:02 +08:00
    计算机\MI 2\内存设备
    没法在命令行确定这个路径 A-Z都不是
    dbow
        25
    dbow  
    OP
       2014-09-17 15:08:55 +08:00
    @xjx0524 假定你用的是windows 7或者以上的系统, 1, 执行wmic, 2, 在弹出的窗口里输入logicaldisk get name, size, volumename, 确定你SD卡的盘符,然后执行python travfs.py 盘符
    imn1
        26
    imn1  
       2014-09-17 15:22:51 +08:00
    未细看思路我理解能力比较慢,见谅
    说些细节
    首先我喜欢用os.walk做这种dirty work,gi上面有个修改版比py原生的os.walk更快(现在身边没有py,记不起项目名)

    下面一些量大可以考虑优化
    路径计算其实string方式比os.path的函数更快
    有些for可以写成map或表达式
    如果最初的获取路径不涉及排序,可以考虑字典或set保存
    部分函数用yield试试

    这个如果全盘搜索我会考虑加入pandas
    如果仅仅为了“找出top N”这个目的用pandas当然有点过分,不过我做文件搜索往往有其他需求,加pandas处理极大量的路径很方便
    xjx0524
        27
    xjx0524  
       2014-09-17 15:23:07 +08:00
    @dbow 3个硬盘,1个dvd,1个小米搞出来的小米助手安装程序,sd卡在便携设备那里,没有盘符
    dbow
        28
    dbow  
    OP
       2014-09-17 15:27:29 +08:00
    @xjx0524 没有盘符是没办法访问的,把SD挂载到某个盘符才行。
    gerorim
        29
    gerorim  
       2014-09-17 18:49:12 +08:00 via Android
    @xjx0524

    preview:


    store:
    gerorim
        30
    gerorim  
       2014-09-17 18:54:27 +08:00 via Android   1
    https://play.google.com/store/apps/details?id=com.google.android.diskusage

    手端 GUI 比起 CLI 友好、直些。

    回复了。。
    xjx0524
        31
    xjx0524  
       2014-09-17 21:07:49 +08:00
    @gerorim 好用 非常感谢!
    gateswong
        32
    gateswong  
       2014-09-18 01:05:15 +08:00
    其实 各个系统的文件浏览器都有按照文件大小,创建时间排序的

    你稍微排序一下就可以清理了啊
    shyrock
        33
    shyrock  
       2014-09-18 10:33:27 +08:00
    看到有人推荐 WinDirStat,不知道这个比TreeSize效率如何?
    顺便,TreeSize貌似跨平台。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4872 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 03:55 PVG 11:55 LAX 19:55 JFK 22:55
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86