一个检查文件夹下文件大小的小程序

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

"选择盘符或选择文件夹,在桌面生成Log文件,将选择目录下文件按由大到小排列"

import os
from tkinter import *
from tkinter.ttk import *
from tkinter.filedialog import *
import threading

filelist = []

def formatSize(size, is1024=True):
    "格式化文件大小"
    formatUnit = {1024: ['KB', 'MB', 'GB', 'TB'], 1000: ['KiB', 'MiB', 'GiB', 'TiB']}
    block = 1024 if is1024 else 1000
    for unit in formatUnit[block]:
        size /= block
        if size < block:
            return "{0:.2f}{1}".format(size, unit)
    raise ValueError('文件过大')

def scanDir(beginPath='E:\\'):
    # print('Current Path: {}'.format(beginPath))
    try:
        for item in os.scandir(beginPath):
            if item.is_file():
                path = os.path.join(beginPath, item.name)
                # print('当前文件: {}'.format(path))
                size = item.stat().st_size
                filelist.append([path, size])
            else:
                # pass
                path = os.path.join(beginPath, item.name)
                # print("目录: {}".format(path))
                scanDir(path)
    except PermissionError:
        print('访问拒绝:{}'.format(beginPath))

def outPut(logPath=os.path.join(os.path.expanduser('~'),'Desktop','log.txt')):
    newlist = sorted(filelist, key=lambda x:x[1], reverse=True)
    with open(logPath,'w') as f:
        f.write("{:>6}   {}\n".format("大小","路径"))
        for file in newlist:
            f.write("{:>10} {}\n".format(formatSize(file[1]),file[0]))

def test():
    scanDir()
    outPut()


def main():
    def func(getpath):
        scanDir(getpath)
        outPut()
        print('文件搜索完成')
    def showMsg(*args):
        basePath = {"C": "C:\\", "D": "D:\\", "E": "E:\\", "F": "F:\\"}
        root.update()
        threading.Thread(target=func,args=(basePath[path.get()],)).start()
        return
    def go(*args):
        threading.Thread(target=func, args=(enter.get(),)).start()
        return
    def search(*args):
        enter.set(askdirectory())
    root = Tk()
    root.title("文件大小查看")
    path = StringVar()
    selectPath = Combobox(root, textvariable=path, values=["C","D","E","F"])
    selectPath.current(0)
    checkbtn = Button(root,text="Go",command=go)
    enter = StringVar()
    enterPath = Button(root, textvariable=enter, command=search)
    enter.set("请选择一个文件夹")
    selectPath.bind("<<ComboboxSelected>>", showMsg)
    selectPath.pack(fill=X)
    enterPath.pack(side="left")
    checkbtn.pack(fill=X)
    root.mainloop()

if __name__=="__main__":
    main()







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值