Python作业三:扫描目录文件,发送到指定邮箱

news2024/9/29 13:18:17

问:

作业任务:编写python代码,扫描指定的目录下的所有文件,将这些扫描的文本内容邮件发送到指定邮箱(如:自己的qq邮箱)

发送邮箱:yagmail

以 163 邮箱为例,在编码之前,我们需要开启 SMTP 服务

然后,手动新增一个授权码

其中,账号、授权码和服务器地址用于连接登录邮箱服务器

ya-gmail 只需要几行代码,就能实现发送邮件的功能

首先,安装依赖库

# 安装依赖库
pip3 install yagmail

然后,通过账号、授权码和服务器地址连接邮箱服务器,返回一个服务对象

import yagmail

#连接服务器
#用户名、授权码、服务器地址
yag_server = yagmail.SMTP(user = 'xxxxxxxxxxx@163.com',password = 'XXXXXXXXXXX',host = 'smtp.163.com')

通过 send () 函数,将邮件发送出去

#发送列表对象
email_to = ['yyyyyyyyyy@qq.com',]
email_title = 'Python作业'
email_content = file_tree

#发送邮件
yag_server.send(email_to,email_title,email_content)

邮件发送完毕之后,关闭连接

#关闭连接
yag_server.close()

扫描目录文件

import os

#文件扫描,并树形输出

def scan_file(path, depth=0):
    """扫描文件并打印树形结构"""
    indent = " " * 4 * depth

    files = sorted(os.listdir(path))
    file_tree = ""
    for f in files:
        fullpath = os.path.join(path, f)
        if os.path.isdir(fullpath):
            file_tree += f"{indent}├─ {f}/\n"
            file_tree += scan_file(fullpath, depth + 1)
            if depth == 0 and f < files[-1]:
                file_tree += f"{indent}│   \n"
        elif os.path.isfile(fullpath):
            file_tree += f"{indent}├─ {f}\n"
            if depth == 0 and f < files[-1]:
                file_tree += f"{indent}│   \n"
    return file_tree


if __name__ == '__main__':
    path = "D:\\111"
    # 扫描文件并收集结果
    file_tree = scan_file(path)

该函数用于扫描指定路径下的文件和文件夹,并以树形结构进行输出。

函数接受两个参数:path表示要扫描的路径,depth表示当前扫描的深度,默认为0。

函数通过递归调用来实现文件夹的层级遍历,对于每个文件夹,它会先打印出当前文件夹的名称,然后递归调用scan_file函数来扫描并打印该文件夹内的文件和子文件夹。

对于文件,它则直接打印出文件的名称。最终返回一个字符串,其中包含了整个路径下的文件和文件夹的树形结构。

在__main__块中,该函数被调用来扫描路径为"D:\111"的文件夹,并将结果存储在file_tree变量中。

代码

#作业任务:编写python代码,扫描指定的目录下的所有文件,
# 将这些扫描的文本内容邮件发送到指定邮箱(如:自己的qq邮箱)
import yagmail
import os

#文件扫描,并树形输出

def scan_file(path, depth=0):
    """扫描文件并打印树形结构"""
    indent = " " * 4 * depth

    files = sorted(os.listdir(path))
    file_tree = ""
    for f in files:
        fullpath = os.path.join(path, f)
        if os.path.isdir(fullpath):
            file_tree += f"{indent}├─ {f}/\n"
            file_tree += scan_file(fullpath, depth + 1)
            if depth == 0 and f < files[-1]:
                file_tree += f"{indent}│   \n"
        elif os.path.isfile(fullpath):
            file_tree += f"{indent}├─ {f}\n"
            if depth == 0 and f < files[-1]:
                file_tree += f"{indent}│   \n"
    return file_tree


if __name__ == '__main__':
    path = "D:\\111"
    # 扫描文件并收集结果
    file_tree = scan_file(path)

#连接服务器
#用户名、授权码、服务器地址
yag_server = yagmail.SMTP(user = 'xxxxxxxxxxx@163.com',password = 'XXXXXXXXXXX',host = 'smtp.163.com')

#发送列表对象
email_to = ['yyyyyyyyyy@qq.com',]
email_title = 'Python作业'
email_content = file_tree

#发送邮件
yag_server.send(email_to,email_title,email_content)

#关闭连接
yag_server.close()

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1662826.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MMdetection在Featurize服务器运行时相关问题

写点闲话&#xff1a; 之前因为毕业&#xff0c;想写代码再也没有稳定的机子跑了&#xff0c;自己电脑有时候也带不动&#xff0c;所以开始使用Featurize&#xff0c;这里可以租一些显卡来用&#xff0c;价格总体来说对我们这种偶尔有大规模算力需求的打工人非常友好。使用方法…

10.轮转数组

文章目录 题目简介题目解答解法一&#xff1a;使用额外的数组代码&#xff1a;复杂度分析&#xff1a; 解法二&#xff1a;数组反转代码&#xff1a;复杂度分析&#xff1a; 题目链接 大家好&#xff0c;我是晓星航。今天为大家带来的是 轮转数组 相关的讲解&#xff01;&#…

大数据Scala教程从入门到精通第六篇:Scala源文件编写和运行

一&#xff1a;Scala源文件编写和运行 1&#xff1a;源代码比较 public class HelloJava{public static void main(String[] args){System.out.println("hello scala")} } object HelloScala{//用于声明方法 入参是一个String类型的数组。返回值类型为空def main…

Funkey游戏机新作,基于全志T113的全新版本

不同于配置高端、性能强劲的Windows、安卓掌机&#xff0c;有一部分的爱好者往往对拥有复古外形的开源掌机更加感兴趣。作为开源掌机的热门产品&#xff0c;小巧便携的FunKeys掌机是各位开源爱好者争相复刻的对象。因热爱开源掌机DIY而聚集的“双核掌机开发组”开发者团队&…

【送书福利第六期】Java开发的150多个坑,你踩过几个?(文末送书)

文章目录 做Java开发别掉坑里还不知道 程序员为什么会掉到坑里却不自知&#xff1f;第一是意识不到坑的存在。第二是有些 bug 或问题只在特定情况下暴露。第三是变化不明显的性能问题。 《Java开发坑点解析&#xff1a;从根因分析到最佳实践》Java 开发完美避坑指南结语 &#…

ubantu安装docker以及docker-compose

ubantu安装docker以及docker-compose 安装docker1、从官方存储库中安装Docker2、启动Docker服务3、验证 安装docker compose使用docker部署服务1、需要再opt文件夹下创建以下文件夹&#xff0c;/opt文件夹目录说明2、可将已备份对应文件夹拷至对应文件夹下3、在/opt/compose目录…

【Axure高保真原型】中继器版输入表单——多种输入方式

今天和大家分享中继器版输入表单——多种输入方式的原型模板&#xff0c;这个模板方便我们快速制作表单&#xff0c;里面包含了输入框、下拉列表、选择器共9种常用的元件&#xff0c;后续也可以根据需要自行添加到中继器里。这个原型模板是用中继器制作的&#xff0c;所以使用也…

基于Springboot+Vue的Java项目-宠物商城网站系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

腾讯互娱面经,希望别凉

面试题详解 Go接口 接口在Golang中扮演着连接不同类型之间的桥梁&#xff0c;它定义了一组方法的集合&#xff0c;而不关心具体的实现。接口的作用主要体现在以下几个方面&#xff1a; 多态性: 接口允许不同的类型实现相同的方法&#xff0c;从而实现多态性。这意味着我们可…

Qt5 互动地图,实现无人机地面站效果

一、概述 本文主要通过Qt5opmapcontrol实现一个简单的无人机地面站效果。opmapcontrol是一个比较古老的QT开源地面站库&#xff0c;可选择谷歌地图&#xff0c;必应地图&#xff0c; 雅虎地图&#xff0c;GIS等。可直接使用源码&#xff0c;也可以编译生成库进行调用。实现效果…

Android11 InputDispatcher 分发事件流程分析

在 Android11 InputReader分析 一文中分析到&#xff0c;InputReader将数据放入iq队列后&#xff0c;唤醒InputDispatcher线程&#xff0c;执行InputDispatcher的dispatchOnce方法 //frameworks\native\services\inputflinger\dispatcher\InputDispatcher.cpp void InputDispa…

软件测试之 接口测试 Postman使用

接口测试 URL HTTP协议 HTTP 请求部分 HTTP响应部分 Postman使用 界面介绍 这里 注意 如果你无法访问 那么 captchaImage这个打错了&#xff0c;给的资料中是错误的地址 https://kdtx-test.itheima.net/api/captchaImage登录接口 科大天下 第一个接口的登录设置 https://kd…

【生信技能树】数据挖掘全流程

R包的安装&#xff0c;每次做分析的时候先运行这段代码把R包都安装好了&#xff0c;这段代码不需要任何改动&#xff0c;每次分析直接运行。 options("repos""https://mirrors.ustc.edu.cn/CRAN/") if(!require("BiocManager")) install.packag…

【CCF-CSP】202403-4 十滴水

题目描述 十滴水是一个非常经典的小游戏。 小 C 正在玩一个一维版本的十滴水游戏。我们通过一个例子描述游戏的基本规则。 游戏在一个 1c 的网格上进行&#xff0c;格子用整数x(1≤x≤c) 编号&#xff0c;编号从左往右依次递增。网格内 m 个格子里有 1∼41∼4 滴水&#xff0…

【教程向】从零开始创建浏览器插件(四)探索Chrome扩展的更多常用API

探索Chrome扩展的更多常用API 在Chrome扩展开发中&#xff0c;除了最基础的API外&#xff0c;Chrome还提供了一系列强大的API&#xff0c;允许开发者与浏览器的各种功能进行交互。本文将介绍其中几个常用的API&#xff0c;并提供详细的示例代码帮助您开始利用这些API。 书签…

华为与达梦数据签署全面合作协议

4月26日&#xff0c;武汉达梦数据库股份有限公司&#xff08;简称“达梦数据”&#xff09;与华为技术有限公司&#xff08;简称“华为”&#xff09;在达梦数据武汉总部签署全面合作协议。 达梦数据总经理皮宇、华为湖北政企业务总经理吕晓龙出席并见证签约&#xff1b;华为湖…

free5gc容器端口映射

启动容器 docker-compose up -d 停止容器 docker-compose stop 随后进入webconsole进行终端配置&#xff0c;与free5gc-ue.yaml中配置一致 查看端口占用进程 sudo lsof -i :8080 结束占用端口进程 sudo kill -9 68465 停止指定容器 docker stop amf 获取docker中启动容器…

什么是Meme币?——区块链技术的加密货币

Meme代币是一种基于区块链技术的加密货币&#xff0c;旨在为用户提供一种简单、有趣且易于传播的方式来进行数字资产交易和投资。Meme代币通常与特定的主题或故事相关联&#xff0c;通过社交媒体等渠道进行传播和推广&#xff0c;吸引更多的用户参与并增加其价值。 Meme代币的…

GA-CNN-LSTM多输入时序预测|遗传算法-卷积-长短期神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…

在go-zero中使用jwt

gozero使用jwt 两个步骤 获取token验证token 前端获取token 先编写 jwt.api 文件&#xff0c;放在api目录下 syntax "v1"info (title: "type title here"desc: "type desc here"author: "type author here"email: &quo…