• 邮件发送的两种实现方法。


    Python实现目录遍历及文件搜索

    米粒教育

    发布时间:19-03-2020:07

    前面我们已经掌握了目录的创建、修改和删除方法,但是要开发文件资源管理器程序,仅有这些知识还是不够的。我们还有下面的问题需要解决:如何遍历目录中所有的文件?如何在目录中搜索到指定的文件?当目录中有子目录时该如何处理?

    如何遍历目录中所有的文件?

    遍历就是对目录中的所有文件按顺序逐个访问。例如程序要求列出某个目录中所有的文件名称,我们就需要访问这个目录中所有的文件并获取文件的名称,然后将获取的文件名称输出到屏幕上。

    那么,我们如何遍历目录中所有的文件呢?Python语言的OS模块为我们提供了两个列出目录中所有文件的方法:

    例1:使用listdir遍历目录文件

    例1使用OS模块的listdir方法遍历D盘盘符下的pub目录,listdir返回一个列表,列表包含pub目录下所有文件名称,然后使用for循环输出列表。

    例1输出结果如下图所示。图1 例1遍历pub目录的输出结果

    从例1的输出结果可以看出,listdir方法仅返回了文件名称,如果我们需要输出文件的整个路径,该如何处理呢?只需要使用os模块下的join方法连接遍历的目录路径和文件名称就可以了。修改例1的代码如下:

    执行上面的代码,输出结果如下图所示。

    图 2 例1遍历pub目录输出文件路径

    从上图输出结果可以看出,pub目录下的所有文件以完整路径输出。但有一个问题,就是在pub目录下有doc子目录,该子目录下的文件并没有列出,下面我们将讨论当目录包含子目录时该如何处理?

    当目录中有子目录时该如何处理?

    在例1中要遍历的pub目录下面有doc子目录,例1的程序并没有列出doc子目录下的文件,我们现在希望也能遍历doc子目录下的文件。这时我们就要使用walk方法了,walk方法可以递归遍历目录下面的所有文件和子目录。

    例2:使用walk递归遍历目录文件

    例2中使用walk方法递归遍历目录文件,walk方法会返回一个三元组,分别是root、dirs和files。其中root是当前正在遍历的目录路径;dirs是一个列表,包含当前正在遍历的目录下所有的子目录名称,不包含该目录下的文件;files也是一个列表,包含当前正在遍历的目录下所有的文件,但不包含子目录。

    例2输出结果如下图所示。

    图 3 使用walk方法递归遍历pub目录输出

    前面我们实现了在指定的目录中遍历所有文件,也包括子目录的遍历,下面我们来看看如何在指定的目录中搜索文件。

    如何在指定的目录中搜索文件?

    实现在指定的目录中搜索文件,主要实现思路是使用walk方法递归遍历要搜索的目录,在递归遍历过程中,使用for循环遍历walk方法返回的files列表,判断files列表中的文件名称是否和要搜索的文件名称相同,若相同就输出该文件。

    例3:在指定的目录中搜索文件

    例3使用walk方法递归遍历pub目录,使用walk方法主要是考虑到pub目录下有子目录,也需要在子目录中搜索文件。

    现在我们已经掌握了使用listdir方法和walk方法遍历或递归遍历目录中的文件,也掌握了如何从目录中搜索文件。但是要编写资源管理程序,还得需要掌握Python函数和模块知识,以及Python用户界面的相关知识,后面会陆续介绍这些知识。

    邮件发送的两种实现方法。

     

     
     
    克隆/下载 
     
     
     
     
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
     
    import smtplib
    from email.mime.text import MIMEText
    from email.mime.multipart import MIMEMultipart
    from email.header import Header
     
    # 第三方 SMTP 服务
    mail_host="smtp.qq.com" #设置服务器
    mail_user="849919718@qq.com" #用户名
    mail_pass="qgazsthdfsaybedi" #口令
     
     
    sender = '849919718@qq.com'
    receivers = ['849919718@qq.com'] # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
     
    #创建一个带附件的实例
    message = MIMEMultipart()
    message['From'] = Header("菜鸟教程", 'utf-8')
    message['To'] = Header("测试", 'utf-8')
    subject = 'Python SMTP 邮件测试'
    message['Subject'] = Header(subject, 'utf-8')
     
    #邮件正文内容
    message.attach(MIMEText('这是菜鸟教程Python 邮件发送测试……', 'plain', 'utf-8'))
     
    # 构造附件1,传送当前目录下的 test.txt 文件
    att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
    att1["Content-Type"] = 'application/octet-stream'
    # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
    att1["Content-Disposition"] = 'attachment; filename="test.txt"'
    message.attach(att1)
     
    # 构造附件2,传送当前目录下的 runoob.txt 文件
    att2 = MIMEText(open('runoob.txt', 'rb').read(), 'base64', 'utf-8')
    att2["Content-Type"] = 'application/octet-stream'
    att2["Content-Disposition"] = 'attachment; filename="runoob.txt"'
    message.attach(att2)
     
    try:
    smtpObj = smtplib.SMTP('localhost')
    smtpObj.sendmail(sender, receivers, message.as_string())
    print("邮件发送成功")
    except smtplib.SMTPException:
    print("Error: 无法发送邮件")
     
     
     
    邮件发送的两种实现方法。

     

     
     
    克隆/下载 
     
     
     
    东方怂天 提交于 1年前 . Initial commit
     
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    import yagmail
     
    # 链接邮箱服务器
    username = "849919718@qq.com"
    passwd = "qgazsthdfsaybedi"
     
    mail = yagmail.SMTP(user=username,
    password=passwd,
    host='smtp.qq.com', # 其他服务器就smtp.qq.com smtp.126.com
    smtp_ssl=True
    ) # 如果用的是qq邮箱或者你们公司的邮箱使用是安全协议的话,必须写上 smtp_ssl=True
    mail.send(
    to=['849919718@qq.com', '3021921315@qq.com'], # 如果多个收件人的话,写成list就行了,如果只是一个账号,就直接写字符串就行to='12345678@qq.com'
    cc='849919718@qq.com', # 抄送
    subject='学习发送邮件', # 邮件标题
    contents='你好,你今天开心吗?', # 邮件正文
    attachments=[r'C:UsersasusDesktopBK3 U1A要点总结.docx',
    r'C:UsersasusDesktop1825101045 杨祉 报告1.doc']) # 附件如果只有一个的话,用字符串就行,attachments=r'C:\pp\b.txt'
    print('发送成功')

     

  • 相关阅读:
    Spring Security Oauth2 认证(获取token/刷新token)流程
    Centos7安装配置Apache(httpd)+php+mysql+phpMyAdmin
    servlet 请求(Request)
    关于对连接数据库时出现1130-host “**” is not allowed to connect to this MySql/mariadb server 的错误解决方法
    在Spring中配置Hibernate和单独配置Hibernate的区别
    新手学Struts2的几个小注意事项
    Oracle 11g 发行版2 新安装后关于登录的一些基本操作
    CentOS7下mariaDB和phpmyadmin的一些安装和配置问题
    Ubuntu的一些文件系统的操作(转自我自己的其他博客)
    jquery上传图片获取像素
  • 原文地址:https://www.cnblogs.com/xinxihua/p/13090327.html
Copyright © 2020-2023  润新知