【千锋Python2205班9.02笔记-day10-Python发邮件和操作PDF】

01-homework

第一种方法:
写一个登录注册系统,能够实现用户的注册、登录。用户的账号信息写入后缀名为xlsx的文件中,A、B两列分别用来保存账号、密码,两列的列名为账号、密码即可。登录时从文件中读取已存在账号密码,注册时新增账号密码。

import os
from openpyxl import Workbook, load_workbook
"""
os模块为多操作系统的访问提供了相关功能的支持,涉及对文件相关操作、shell命令行操作、CPU等硬件相关信息的获取等等一系列和操作系统相关的操作。
"""
#os.path.isfile(路径):判断路径指定文件是否存在,返回True或False
#os.path.isdir(路径):判断路径指定文件夹是否存在,返回True或False
#os.path.exists(路径):判断路径指定的文件或文件夹是否存在,返回True或False
#创建或加载文件
filePath = r'用户账号信息.xlsx'
wb = load_workbook(filePath) if os.path.isfile(filePath) else Workbook()
print(wb.sheetnames)
#切换进工作表
sheet1 = wb['Sheet']
#写入列名
sheet1.cell(1, 1).value = '账号'
sheet1.cell(1, 2).value = '密码'
wb.save('用户账号信息.xlsx')

result = input('请输入您的选择(登录或注册):')
#登录
if result == "登录":
    userName = input('请输入要登录的账号:')
    password = input('请输入密码:')
    wb = load_workbook(filePath)
    ws = wb['Sheet']
    # 查看文件中信息的行数
    rows = ws.max_row
    for row in range(2, rows + 1):
        if ws.cell(row, 1).value == userName and ws.cell(row, 2).value == password:
            print('登陆成功')
            break
    else:
        print('用户名不存在或密码输入错误')

#注册
elif result == '注册':
    while True:
        userName = input('请输入要注册的账号:')
        password = input('请输入密码:')
        wb = load_workbook(filePath)
        ws = wb['Sheet']
        # 查看文件中信息的行数
        rows = ws.max_row
        for row in range(2, rows + 1):
            if ws.cell(row, 1).value == userName:
                print('您输入的账号已经被注册,请重新输入!')
                break
        else:
            ws.cell(rows + 1, 1).value = userName
            ws.cell(rows + 1, 2).value = password
            wb.save(filePath)
            print('注册成功')
            break

第二种优化后的方法

写一个登录注册系统,能够实现用户的注册、登录。用户的账号信息写入后缀名为xlsx的文件中,A、B两列分别用来保存账号、密码,两列的列名为账号、密码即可。登录时从文件中读取已存在账号密码,注册时新增账号密码。

import os
from openpyxl import Workbook, load_workbook
"""
os模块为多操作系统的访问提供了相关功能的支持,涉及对文件相关操作、shell命令行操作、
CPU等硬件相关信息的获取等等一系列和操作系统相关的操作。
"""
#os.path.isfile(路径):判断路径指定文件是否存在,返回True或False
#os.path.isdir(路径):判断路径指定文件夹是否存在,返回True或False
#os.path.exists(路径):判断路径指定的文件或文件夹是否存在,返回True或False



result = input('请输入您的选择(登录或注册):')

#创建或加载文件
filePath = r'用户账号信息.xlsx'
if not os.path.isfile(filePath):
    # 如果文件不存在,创建,写入必要信息
    wb = Workbook()
    # 切换进工作表
    sheet1 = wb['Sheet']
    # 写入列名
    sheet1.cell(1, 1).value = '账号'
    sheet1.cell(1, 2).value = '密码'
else:
    wb = load_workbook(filePath)

ws = wb['Sheet']
#查看文件中信息的行数
rows = ws.max_row
#登录
if result == "登录":
    userName = input('请输入要登录的账号:')
    password = input('请输入密码:')
    for row in range(2, rows + 1):
        if ws.cell(row, 1).value == userName and ws.cell(row, 2).value == password:
            print('登陆成功')
            break
    else:
        print('用户名不存在或密码输入错误')

#注册
elif result == '注册':
    while True:
        userName = input('请输入要注册的账号:')
        password = input('请输入密码:')
        for row in range(2, rows + 1):
            if ws.cell(row, 1).value == userName:
                print('您输入的账号已经被注册,请重新输入!')
                break
        else:
            ws.cell(rows + 1, 1).value = userName
            ws.cell(rows + 1, 2).value = password
            wb.save(filePath)
            print('注册成功')
            break

wb.save(filePath)

02-Python发邮件添加附件

import smtplib
#构建能够添加附件的邮件
from email.mime.text import MIMEText
#使用MIMEMultipart添加附件
from email.mime.multipart import MIMEMultipart

#1.发送人账号
sendAddress = '1766935706@qq.com'
#2.发送人授权码(邮箱中的授权码等同于密码)
password = 'ntjoswtxxnhybcaa'
#3.连通服务器
#465端口就是发送邮件的端口
server = smtplib.SMTP_SSL('smtp.qq.com', 465)
print(server)
#4.登录
loginResult = server.login(sendAddress, password)
print(loginResult)
#(235, b'Authentication successful')
#235响应成功状态码


#1.定义一个可以添加正文和附件的邮件消息对象
#msg是信息message的缩写
msg = MIMEMultipart()
#构建发件人、收件人、邮件主题等
msg['From'] = 'Mr.Fu<1766935706@qq.com>'
msg['To'] = '张三<张三@qq.com>'
msg['Subject'] = 'Python自动发邮件'
#构建正文
content = """
尊敬的用户:
你好!
我正在使用你的邮箱账号进行Python邮件测试,即将要轰炸你,请做好心理准备!
"""
#添加正文
#使用attach()向能够添加多组件的MIMEMultipart中添加邮件组成部分
msg.attach(MIMEText(content, 'plain', 'utf-8'))

#添加附件
#先将附件使用二进制形式(字节)读取,再使用MIMEText方法进行规范化
#base64:最常用的字节传输方式
attachment_1 = MIMEText(open('1.jpg', 'rb').read(), 'base64', 'utf-8')
#告知浏览器或邮件服务器这是字节流
attachment_1['Content-Type'] = 'application/octet-stream'
#告知浏览器或邮件服务器这是一个名字叫做xxxx的邮件附件
#这个名字不要出现中文,不同邮箱对待中文的方式不一样
attachment_1['Content-Disposition'] = 'attachment;filename="1.jpg"'
msg.attach(attachment_1)

attachment_2 = MIMEText(open('管理员.jpeg', 'rb').read(), 'base64', 'utf-8')
attachment_2['Content-Type'] = 'application/octet-stream'
attachment_2['Content-Disposition'] = 'attachment;filename="admin.jpeg"'
msg.attach(attachment_2)

#发送邮件
To = ['1766935706@qq.com', '1766935706@qq.com']
server.sendmail(sendAddress, To, msg.as_string())
print('发送成功')

03-Python暴力破解密码

如何使用python暴力破解“密码”。

一、“密码”破解应用

python破解wifi密码、拿到一个有密码的压缩包,但是不知道压缩包密码,可以尝试使用python破解
黑客破解账号密码,也可以使用python进行暴力破解等等

暴力破解:穷举法

二、“密码”的组合

数字、字母、标点符号:
在ASCII码表中数字、字母、标点符号组合起来大概几十个符号。
个别网站可能还允许使用汉字作为密码。

采取大众化的形式尽可能的跑密码(排列组合穷举)

三、“密码”的长度

Wifi要求密码最低也是长度为8位的密码
其他的密码要求均不一致,只能按照比较普遍的形式进行密码设置
我们将密码的长度粗略的划分到4-11位

四、确认

密码使用数字和字母
长度位4-11位
涉及到排列组合穷举法

from itertools import product

#product作用:将提供的容器中的所有元素排列组合形式按照指定的长度完全列出来
#1.将数字、字母放入容器中
list1 = [chr(i) for i in range(48, 58)]
list2 = [chr(i) for i in range(65, 91)]
list3 = [chr(i) for i in range(97, 123)]
newList = list1 + list2 + list3
print(newList)
#2.指定长度范围
for lenght in range(4, 12):
    # 3.开始生成“密码”
    # product(字符串容器,repeat=长度)
    for i in product(newList, repeat=lenght):
        result = ''.join(i)
        print(result)

04-Python操作PDF:加密

import PyPDF2

#PyPDF2模块操作PDF整体思想:
#从源文件中读,对读出来的数据做的一系列操作都放入新的PDF文件
#1.读取PDF
reader1 = PyPDF2.PdfReader('./PDF素材/水印.pdf')
print(reader1)
#2.创建一个空白的PDF写方法
writer1 = PyPDF2.PdfWriter()
#3.获取原来的PDF总页数
pages = reader1.getNumPages()
#4.分别将每一页PDF遍历
for i in range(pages):
    # 通过下标指定第几页,将此页添加到空白的PDF中
    writer1.addPage(reader1.pages[i])
#5.加密操作:encrypt()
writer1.encrypt('0123')
#6.将PDF写入指定文件再保存关闭
#将指定文件使用二进制写模式打开,w:如果文件不存在,自动创建新的,如果文件存在,清空内容再写入
f = open('水印(加密版).pdf', 'wb')
#将PDF写入到文件f中
writer1.write(f)
#保存关闭
f.close()

#decrypt()解密
#encrypt()加密

05-Python操作PDF:解密

import PyPDF2

reader1 = PyPDF2.PdfReader('水印(加密版).pdf')
#判断读出来的信息是否为加密信息:is_encrypted
print(reader1.is_encrypted)
#解密:
if reader1.is_encrypted:
    # 使用decrypt()和加密时的密码进行解密
    reader1.decrypt('0123')
#创建空白的PDF写方法
writer1 = PyPDF2.PdfWriter()
#从读出来的PDF中读取每一页
for i in range(reader1.getNumPages()):
    # 将PDF的每一页添加到写方法中
    writer1.addPage(reader1.pages[i])

#将PDF保存,关闭
f = open('水印(解密版).pdf', 'wb')
writer1.write(f)
f.close()

06-结合python暴力破解密码破解PDF

import PyPDF2
from itertools import product

reader1 = PyPDF2.PdfReader('水印(加密版).pdf')
#判断读出来的信息是否为加密信息:is_encrypted
print(reader1.is_encrypted)
#--------------------------------------
#解密:
if reader1.is_encrypted:
    # product作用:将提供的容器中的所有元素排列组合形式按照指定的长度完全列出来
    # 1.将数字、字母放入容器中
    list1 = [chr(i) for i in range(48, 58)]
    list2 = [chr(i) for i in range(65, 91)]
    list3 = [chr(i) for i in range(97, 123)]
    newList = list1 + list2 + list3
    print(newList)
    # 2.指定长度范围
    lenght = 4
    while 4 <= lenght <= 11:
        # 3.开始生成“密码”
        # product(字符串容器,repeat=长度)
        for i in product(newList, repeat=lenght):
            result = ''.join(i)
            print(f'正在尝试密码:{result}')
            # 使用decrypt()和加密时的密码进行解密
            # 解密失败:PasswordType.NOT_DECRYPTED
            # 解密成功:PasswordType.OWNER_PASSWORD
            reader1.decrypt(result)
            if str(reader1.decrypt(result)) == 'PasswordType.OWNER_PASSWORD':
                # 当密码解密成功后,将密码长度设置为一个不可能存在的数值,这将导致while循环不能再正常执行
                print(f'正确的密码是:{result}')
                lenght = -1
                break
        lenght += 1


#--------------------------------------
#创建空白的PDF写方法
writer1 = PyPDF2.PdfWriter()
#从读出来的PDF中读取每一页
for i in range(reader1.getNumPages()):
    # 将PDF的每一页添加到写方法中
    writer1.addPage(reader1.pages[i])

#将PDF保存,关闭
f = open('水印(解密版).pdf', 'wb')
writer1.write(f)
f.close()

07-Python读取PDF文字

import PyPDF2

#PyPDF2不能读取PDF中图片上的文字
#reader1 = PyPDF2.PdfReader('./PDF素材/001-Python认知.pdf')
reader1 = PyPDF2.PdfReader('./PDF素材/001-Python环境安装.pdf')
#一页一页的读
for i in range(reader1.getNumPages()):
    # 根据下表指定页面
    page = reader1.pages[i]
    # 将PDF每一页的内容读取:extract_text()
    content = page.extract_text()
    print(content, type(content))

PDF中图片上的文字应该如何读取
1.截图、文字识别。 —> OCR光学文字识别
Python中涉及到的光学文字识别
EasyOCR模块、百度的飞桨、百度AI开发者平台等N多个OCR模块可以供python选择。

08-Python操作PDF添加水印

import PyPDF2

#分别读取需要加水印的PDF和水印PDF模版

reader1 = PyPDF2.PdfReader('./PDF素材/001-Python认知.pdf')
water = PyPDF2.PdfReader('./PDF素材/水印.pdf')
writer1 = PyPDF2.PdfWriter()
for i in range(reader1.getNumPages()):
    page = reader1.pages[i]
    waterPage = water.pages[0]
    # 两个页面融合:mergePage()
    page.mergePage(waterPage)
    # 将添加了水印的页面添加到PDF写操作中
    writer1.addPage(page)

f = open('001-Python认知(水印版).pdf', 'wb')
writer1.write(f)
f.close()

09-Python合并多个PDF

import PyPDF2

#1.创建空白PDF文件
writer = PyPDF2.PdfWriter()
#2.准备文件
file = ['001-Python环境安装.pdf', '002-Pycharm安装.pdf']
for i in file:
    filePath = f'./PDF素材/{i}'
    reader = PyPDF2.PdfReader(filePath)
    for i in range(reader.getNumPages()):
        page = reader.pages[i]
        writer.addPage(page)

#保存到新文件
f = open('合并.pdf', 'wb')
writer.write(f)
f.close()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值