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 · 4629 次点击
    这是一个创建于 3711 天前的主题,其中的信息可能已经有所发展或是发生改变。
    代码:
    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
       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,git上面有个修改版比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   ·   实用小工具   ·   1142 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 22:51 · PVG 06:51 · LAX 14:51 · JFK 17:51
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.