【学习笔记】Python获取磁盘、文件夹大小信息(附邮件发送)(二)

简介: 【学习笔记】Python获取磁盘、文件夹大小信息(附邮件发送)(二)

【学习笔记】Python获取磁盘、文件夹大小信息(一)中已经描述了怎么获取文件的大小,磁盘的大小。
本次笔记增加邮件服务,这样可以更好的掌握磁盘的运行状态。

发送邮件

def sendmail(sub, con):
    msg = email.mime.multipart.MIMEMultipart()
    msg['from'] = "xxx.com" # 发邮件的邮箱地址
    msg['to'] = "yyy.com" # 收邮件的邮箱地址
    msg['subject'] = sub # 邮件标题
    content = con # 邮件内容
    txt = email.mime.text.MIMEText(content)
    msg.attach(txt)
    smtp = smtplib.SMTP()
    smtp.connect('smtp.126.com') #使用的邮件服务
    smtp.login('xxx.com', 'zzz') # 登录发邮件的邮箱账号和密码
    smtp.sendmail(msg['from'], msg['to'],str(msg)) # 发邮件格式
    smtp.quit()
    
sendmail("当前磁盘的运行状态", str(ddddd), encoding='GBK' ) # str(ddddd)需要发送的内容

获取D:\image的大小,然后此文件夹会不停的写入文件,当D盘剩余空间小于5GB时,给出警告信息,并把警告信息写入log文件中,然后把log中的内容读取出来放入邮件正文,发送邮件

"""
Author:NoamaNelson
Date:2019-11-19
Discription:Get the size of D:\\image, and then this folder will keep writing files. 
When the remaining space of D disk is less than 5GB, a warning message will be given
"""

import os
import os.path
import smtplib
import email.mime.multipart
import email.mime.text
import sendmail
import psutil
import collections


def get_size(path):
    list1 = []
    fileList = os.listdir(path)  # 获取path目录下所有文件
    for filename in fileList:
        pathTmp = os.path.join(path,filename)  # 获取path与filename组合后的路径
        if os.path.isdir(pathTmp):   # 判断是否为目录
            get_size(pathTmp)        # 是目录就继续递归查找
        elif os.path.isfile(pathTmp):  # 判断是否为文件
            filesize = os.path.getsize(pathTmp)  # 如果是文件,则获取相应文件的大小
            #print('目录中的子文件大小:%d字节' % filesize)
            list1.append(filesize)      # 将文件的大小添加到列表
    print('%s 目录中的文件总大小:%d 字节' % (path, sum(list1)))
    print('%s 目录中的文件总大小: %.4f MB' % (path, (sum(list1)/1024/1024)))
    print('%s 目录中的文件总大小: %.4f GB' % (path, (sum(list1)/1024/1024/1024)))
    return sum(list1)
    
def get_disk_info():
    disk_used = {}
    for id in psutil.disk_partitions():
        if 'cdrom' in id.opts or id.fstype == '':
            continue
        disk_name = id.device.split(':')
        s = disk_name[0]
        disk_info = psutil.disk_usage(id.device)
        #print(disk_info)
        disk_used[s + '盘使用率:'] = '{}%'.format(disk_info.percent)
        disk_used[s + '剩余空间:'] = '{}GB'.format(disk_info.free // 1024 // 1024 // 1024)
    print("sdsds:%s"%disk_used)
    return disk_used

def sendmail(sub, con):
    msg = email.mime.multipart.MIMEMultipart()
    msg['from'] = "xxx.com" # 发邮件的邮箱地址
    msg['to'] = "yyy.com" # 收邮件的邮箱地址
    msg['subject'] = sub # 邮件标题
    content = con # 邮件内容
    txt = email.mime.text.MIMEText(content)
    msg.attach(txt)
    smtp = smtplib.SMTP()
    smtp.connect('smtp.126.com') #使用的邮件服务
    smtp.login('xxx.com', 'zzz') # 登录发邮件的邮箱账号和密码
    smtp.sendmail(msg['from'], msg['to'],str(msg)) # 发邮件格式
    smtp.quit()

if __name__ == "__main__":   
    #path= input("输入路径:").strip()  #指定文件路径
    log_name = 'result.log'
    with open(log_name, 'w') as f:
        path = r"D:\\image"
        disk_used1 = get_disk_info()
        for k, v in disk_used1.items():
            f.write('{}{}。\n'.format(k, v))
        list2 = get_size(path)
        f.write('%s 目录中的文件总大小:%d 字节\n' % (path, list2))
        f.write('%s 目录中的文件总大小: %.4f MB\n' % (path, (list2/1024/1024)))
        f.write('%s 目录中的文件总大小: %.4f GB\n' % (path, (list2/1024/1024/1024)))
        disk_used2 = disk_used1['D剩余空间:']
        disk_used3 = int(disk_used2.split('G')[0])
        #intlist2 = intlist1/1024/1024/1024
        if disk_used3 > 20:
            print("D剩余空间:%s"%disk_used1['D剩余空间:'])
            f.write("D剩余空间:%s"%disk_used1['D剩余空间:'])
        elif disk_used3 <= 20:
            print("D盘剩余空间为%dGB,建议停止数据存储"%disk_used3)  
            f.write("D盘剩余空间为%dGB,建议停止数据存储"%disk_used3)
    with open(log_name, 'rb') as logfile:
        sendmail("磁盘当前存储状态", str(logfile.read(), encoding='GBK'))

收到的邮件效果

在这里插入图片描述

目录
相关文章
|
2月前
|
前端开发 JavaScript Java
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
本文介绍了一个结合SpringBoot和Python的实用功能,旨在监控iPhone 15的库存状态并通过邮件提醒用户。系统采用SpringBoot监听苹果官网API,解析JSON数据判断是否有货,并展示最近的库存记录。此外,还能自动触发Selenium+Python脚本实现自动化购买。文中详细介绍了技术栈、接口分析、邮件配置及自动化脚本的设置方法。该项目不仅适用于熟悉后端开发的人员,也适合回顾Layui和Jquery等前端技术。
43 0
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
|
6天前
|
Python
Python量化炒股的数据信息获取—获取沪深股市每日成交概况信息
Python量化炒股的数据信息获取—获取沪深股市每日成交概况信息
19 5
|
6天前
|
Python
Python量化炒股的数据信息获取—获取上市公司分红送股数据信息
Python量化炒股的数据信息获取—获取上市公司分红送股数据信息
18 3
|
18天前
|
Kubernetes API 开发工具
【Azure Developer】通过SDK(for python)获取Azure服务生命周期信息
需要通过Python SDK获取Azure服务的一些通知信息,如:K8S版本需要更新到指定的版本,Azure服务的维护通知,服务处于不健康状态时的通知,及相关的操作建议等内容。
39 18
|
18天前
|
存储 Python 容器
Python编程基础第二天学习笔记
Python编程的第二天学习是建立在基础概念上的深化和扩展,强调了基本语法、数据类型、控制结构和函数的重要性。通过实践这些概念,可以增强对Python编程语言的理解,并为后续的高级学习打下坚实的基础。继续实践并逐渐探索更复杂的编程任务将有助于巩固和扩展这些基础知识。
36 7
|
24天前
|
存储 算法 安全
Python案例分享:如何实现信息的加解密
Python案例分享:如何实现信息的加解密
26 10
|
22天前
|
Python
惊!Python进程间通信IPC,让你的程序秒变社交达人,信息畅通无阻
【9月更文挑战第13天】在编程的世界中,进程间通信(IPC)如同一场精彩的社交舞会,每个进程通过优雅的IPC机制交换信息,协同工作。本文将带你探索Python中的IPC奥秘,了解它是如何让程序实现无缝信息交流的。IPC如同隐形桥梁,连接各进程,使其跨越边界自由沟通。Python提供了多种IPC机制,如管道、队列、共享内存及套接字,适用于不同场景。通过一个简单的队列示例,我们将展示如何使用`multiprocessing.Queue`实现进程间通信,使程序如同社交达人般高效互动。掌握IPC,让你的程序在编程舞台上大放异彩。
15 3
|
5天前
|
Python
Python量化炒股的数据信息获取— 获取上市公司股东和股本信息
Python量化炒股的数据信息获取— 获取上市公司股东和股本信息
15 0
|
6天前
|
网络协议 网络安全 Python
Python 通过UDP传输超过64k的信息
Python 通过UDP传输超过64k的信息
18 0
|
6天前
|
数据处理 Python
python遍历文件夹所有文件按什么排序
python遍历文件夹所有文件按什么排序
下一篇
无影云桌面