一、作业练习

写一个登录注册系统,能够实现用户的注册、登录。
用户的账号信息写入后缀名为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或Falseresult = 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('登陆成功')breakelse:print('用户名不存在或密码输入错误')# 注册
elif result == '注册':while True:userName = input('请输入要注册的账号:')password = input('请输入密码:')for row in range(2, rows + 1):if ws.cell(row, 1).value == userName:print('您输入的账号已经被注册,请重新输入!')breakelse:ws.cell(rows + 1, 1).value = userNamews.cell(rows + 1, 2).value = passwordwb.save(filePath)print('注册成功')breakwb.save(filePath)

二、使用python发送邮件时添加附件

import smtplib# 1.发送人账号
sendAddress = 'xxxxxx@qq.com'
# 2.发送人授权码(邮箱中的授权码等同于密码)
password = 'xxxxxxx'
# 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响应成功状态码# 构建能够添加附件的邮件
from email.mime.text import MIMEText
# 使用MIMEMultipart添加附件
from email.mime.multipart import MIMEMultipart# 1.定义一个可以添加正文和附件的邮件消息对象
# msg是信息message的缩写
msg = MIMEMultipart()
# 构建发件人、收件人、邮件主题等。
msg['From'] = '名<xxxxxx0866@qq.com>'
msg['To'] = '张三<xxxxx@qq.com>;李四<xxxx@qq.com>'
msg['Subject'] = '生活愉快'# 构建正文
conten = """
NihOn你好你好"""# 添加正文
# 使用attach()向能够添加多组件的MIMEMultipart中添加邮件组成部分
msg.attach(MIMEText(conten, 'plain', 'UTF-8'))# 添加附件
# 先将附件使用二进制形式(字节)读取,再使用MIMEText方法进行规范化
# base64:最常见的字节传输方式
attachment_1 = MIMEText(open('1.jpg', 'rb').read(), 'base64', 'utf-8')
# 告知浏览器或邮箱服务器这是字节流
attachment_1['Content-Type'] = 'application/octet-stream'# 告知浏览器或邮件服务器这是一个名字叫做xxx的邮件附件
# 这个名字不要出现中文,不太邮箱对待中文的方式不一样
attachment_1['Content-Disposition'] = 'attachment;filename="1.jpg"'
msg.attach(attachment_1)attachment_2 = MIMEText(open('背影.jpg', 'rb').read(), 'base64', 'utf-8')
attachment_2['Content-Type'] = 'application/octet-stream'
attachment_2['Content-Disposition'] = 'attachment;filename="list.jpg"'
msg.attach(attachment_2)
# 发送邮件
To = ['xxxxxxx@qq.com', 'xxxxxxx@qq.com']
server.sendmail(sendAddress, To, msg.as_string())
print('发送成功')

三、使用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)

四、使用python操作PDF并进行加密

操作PDF需要用到PyPDF2模块,需要先去安装这个模块

import PyPDF2# 1.读取PTF
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('12345')# 6.将PDF写入指定文件再保存关闭
# 将指定文件使用二进制写模式打开,w:如果文件不存在,自动创建新的,如果文件存在,清空内容再写入
f = open('水印.pdf', 'wb')
# 将PDF写入到文件f中
writer1.write(f)
# 保存关闭
f.close()

五、使用python操作PDF并进行解密

import PyPDF2reader1 = PyPDF2.PdfReader('水印.pdf')
# 判断读出来的信息是否为加密信息:is_encrypted
print(reader1.is_encrypted)
# 解密:
if reader1.is_encrypted:# 使用decrypt()和加密时的密码进行解密reader1.decrypt('12345')
# 创建空白的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()

六、结合python暴力破解密码解密PDF

import PyPDF2
from itertools import productreader1 = 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 + list3print(newList)# 2.指定长度范围lenght = 4while 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_PASSWORDreader1.decrypt(result)if str(reader1.decrypt(result)) == 'PasswordType.OWNER_PASSWORD':# 当密码解密成功后,将密码长度设置为一个不可能存在的数值,这将导致while循环不能再正常执行print(f'正确的密码是:{result}')lenght = -1breaklenght += 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()

七、读取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选择。

八、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()

九、python合并多个PDF

import PyPDF2# 1.创建空白PDF文件
writer = PyPDF2.PdfWriter()
# 1.准备文件
file = ['001-Python环境安装.pdf', '002-Python安装.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()

python基础学习之python操作PDF文件、发送邮件添加附件10相关推荐

  1. Python基础学习之列表操作

    Python基础学习之列表操作 文章目录 Python基础学习之列表操作 1. 列表的增,删,改,查 1.1 列表的增加,常用的方法有:append, extent, incert 1.2 列表的删除 ...

  2. Python基础学习之字典操作

    Python基础学习之字典操作 文章目录 Python基础学习之字典操作 1. 字典的创建 1.1 直接赋值法 1.2 关键字赋值法 1.3 列表转化法 1.4 元素增加法 1.5 元组转化法 1.6 ...

  3. Python实例篇:这样操作PDF文件一点都不枯燥了

    前言 大家好,我是辣条 之前辣条有发布过我们常用的两个技能点,今天第三个技能点(PDF)他来了 <Python实例篇:自动操作Excel文件(既简单又特别实用)> <Python技巧 ...

  4. Python基础学习:svn导出差异文件脚本

    由于是刚接触python不久,所以很多都不是很熟练,只能是用到什么查点什么.所以如果有什么bug或者不严谨的语法或其他,希望各位看客指正. 鉴于公司的平台研发部门需求想直接把svn中的差异代码导出并打 ...

  5. 使用ITEXT操作PDF文件

    2019独角兽企业重金招聘Python工程师标准>>> 使用ITEXT操作PDF文件 pom.xml <dependency><groupId>com.ite ...

  6. #CSDN21天学习挑战赛#Python入门之pdfplumber模块-自动化操作PDF文件详细教程教(1)

    ​开卷有益!作者Amily1123是初学python的科研"狗",每天大量的工作是跟pdf.word.excel等文件打交道.最希望的事情就是提高工作效率,能够用最少得精力产出最多 ...

  7. 第19天---python办公自动化---操作PDF文件

    第19天-python办公自动化-操作PDF文件 在Python中,可以使用名为PyPDF2的三方库来读取PDF文件,可以使用下面的命令来安装它. pip install PyPDF2 读取PDF并抽 ...

  8. python 操作PDF文件 之 A3页面转A4

    python 操作PDF文件 A3页面转A4页面 文章目录 1. 需求概述 2. 代码实现 1. 需求概述 最近接到一份PDF资料需要打印,奈何页面是如图所示的A3格式的,奈何目前条件只支持打印A4. ...

  9. Python的学习(十六):对文件的操作

    Python的学习(十六):对文件的操作 编码格式的介绍 Python中的解释器使用的是Unicode(内存) .py文件在磁盘上使用UTF-8存储(外存) 如何修改文件格式?不写的话默认为UTF-8 ...

  10. Python使操作PDF文件变得有趣

    大家好 我是毕加锁 (锁!) 大家在平时操作PDF文件时是不是感觉很枯燥 那么今天就教大家利用Python让操作PDF文件变得有趣起来  目录  工具  从PDF中提取文本  旋转和叠加页面  加密P ...

最新文章

  1. jquery之empty()与remove([expr])区别
  2. ML之HMM:HMM算法相关论文、关键步骤、测试代码配图集合
  3. mybatis高级查询
  4. 如何在 SAP 电商云里设置 Time Restrictions
  5. nao机器人拆解_一些机器人硬件网站
  6. 《黑客》月刊中文版第一期正式发布,很给力!推荐围观!
  7. Redis事务及持久化
  8. mvp模式 php,Hyper-V - 增强会话模式
  9. SpringCloud工作笔记057---常用免费数据接口
  10. 精心准备了10个行业30张大屏模板,0代码直接套用
  11. Oracle中将0x1D转为字符,orcle導入大數據文件
  12. Rsyslog日志格式实例:记录IP地址而非主机名
  13. 极好的GoogleChrome插件下载网站(无需vpn)
  14. #2002 无法登录 MySQL 服务器,phpMyAdmin
  15. GD32 CANFD仲裁区500K,数据区2M 测试
  16. [XCTF] [NJUPT CTF 2017] maze
  17. 【转】ASCII码十进制、十六进制对照表
  18. matlab控制机械手,单关节机械手最优轨迹控制算法优化
  19. 使用计算机设备管理办法,计算机设备管理实施办法
  20. 上海贝尔2452交换机_上海贝尔阿尔卡特交换机配置手册 V2.0

热门文章

  1. FileZilla客户端使用遇到的问题
  2. hl3150cdn废粉仓清零_常见施乐联想兄弟等打印机加粉清零(废粉仓清零)方法
  3. C#入门经典.第6版 源代码下载 百度云盘下载
  4. 项目管理-项目整体计划Excel表格绘制
  5. 22计算机408考研—数据结构—排序(详解加例题)
  6. Unable to open debugger port (127.0.0.1:**): java.net.BindException Address already in use: JVM_Bind
  7. 10.【Axure 10 】菜单-文件-导入RP文件
  8. MATLAB电路模拟——微分运算
  9. UG10.0如何导出CAD图
  10. 微信公众平台基础开发--禾今微信投票系统