文章目录
一、基础学习
1.1 输入功能
# name = input("请输入用户名:")
# if name == "hehe":
# print("sb")
# else:
# print("ss")
1.2 占位符
# name = "喵喵"
# age = 19
# text = f"嫂子的名字叫{name},年龄是{age}"
# print(text)
1.3 随机数选择
# import random
# data_list = ["iphone12","二手女友","10日游","避孕套","大保健"]
# while data_list:
# name = input("请输入自己的名字:")
# value = random.choice(data_list)
# print("恭喜{},抽中{}".format(name,value))
# data_list.remove(value)
1.4 for循环使用及乘法表
# for i in range(1, 10):
# for j in range(1, i + 1):
# text = "{}*{}".format(i, j)
# print(text, end=" ")
# print("")
1.5 文件的操作
from xml.etree import ElementTree as ET
# 创建标签
root = ET.Element("home")
# 创建节点
son1 = ET.Element('son', {'name': '儿1'})
son2 = ET.Element('son', {'name': '儿2'})
# 添孙子
grandson1 = ET.Element('grandson', {'name': '儿11'})
grandson2 = ET.Element('grandson', {'name': '儿12'})
son1.append(grandson1)
son2.append(grandson2)
# 把儿子添加到根节点中
root.append(son1)
root.append(son2)
tree = ET.ElementTree(root)
# short_empty_elements表示标签是否为短标签
tree.write('file/oo.xml', encoding='utf-8', short_empty_elements=tree)
1.6 解析xml文件
content = """<xml>
<ToUserName><![CDATA[gh_7f0B8578]]></ToUserName>
<Status><![CDATA[gh_7f0B8578]]></Status>
</xml>"""
from xml.etree import ElementTree as ET
info = {}
root = ET.XML(content)
for node in root:
info[node.tag] = node.text
print(info)
1.7 操作Excel
# 首先下载第三方文件 pip install openpyxl
from openpyxl import load_workbook
wb = load_workbook("files/p1.xlsx")
# 循环所有sheet
# for sheet in wb:
# cell = sheet.cell(1, 1)
# print(cell.value)
# 获取第N行所有的单元格
# for cell in sheet[1]:
# print(cell.value)
# 删除列表
# del wb["用户列表"]
# wb.save('files/p2.xlsx')
# 获取某个单元格,修改值
# cell = sheet.cell(1, 1)
# cell.value = "开始"
# wb.save("p2.xlsx")
# 获取某个单元格,修改值
# sheet['B3'] = "Alex"
# wb.save("p2.xlsx")
# 获取某个单元格,修改值
# cell_list = sheet["B2": "C3"]
# for row in cell_list:
# for cell in row:
# cell.value = "新的值"
# wb.save("p2.xlsx")
1.7.1 单元格样式(边框)
from openpyxl import load_workbook
from openpyxl.styles import Alignment, Border, Side, Font, PatternFill, GradientFill
wb = load_workbook("files/p1.xlsx")
sheet = wb.worksheets[0]
# 几行几列
cell = sheet.cell(9, 2)
# 居中设置
cell.alignment = Alignment(horizontal='center', vertical='center', text_rotation=0, wrap_text=True)
cell.border = Border(
top=Side(style="thin", color="FFB6C1"),
bottom=Side(style="dashed", color="FFB6C1"),
left=Side(style="dashed", color="FFB6C1"),
right=Side(style="dashed", color="9932CC"),
diagonal=Side(style="thin", color="483D88"),
diagonalUp=True, # 左下~右上
diagonalDown=True # 左上~右下
)
wb.save("p2.xlsx")
1.7.2 crud操作
# 写入公式
# sheet = wb.worksheets[3]
# sheet["D1"] = "合计"
# sheet["D2"] = "=B2*C2"
# wb.save("p2.xlsx")
# # 或者
# sheet = wb.worksheets[3]
# sheet["D3"] = "=SUN(B3,C3)"
# wb.save("p2.xlsx")
# 删除索引
# idx 删除索引的位置
# amount 要删除的个数
sheet.delete_rows(idx=1, amount=2)
sheet.delete_cols(idx=1, amount=3)
wb.save("p2.xlsx")
1.7.3 打印操作
from openpyxl import load_workbook
from openpyxl.styles import Alignment, Border, Side, Font, PatternFill, GradientFill
wb = load_workbook("files/p1.xlsx")
sheet = wb.worksheets[0]
# 打印操作
# 打印区域
sheet.print_area = "A1:D200"
# 打印保留头部
sheet.print_title_cols = "A:D"
sheet.print_title_rows = "1:3"
wb.save("files/p2xlsx")
1.8 发送邮件
import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr
# 邮件的内容
msg = MIMEText("约吗", 'html', 'utf-8')
msg['From'] = formataddr(["haha", "yangyan@126.com"])
msg['Subject'] = "180一晚"
# 发送邮件
server = smtplib.SMTP_SSL("smtp.126.com")
server.login("yangyan@126.com", "LADFKNJHFD")
server.sendmail("发送者邮箱", "接收者邮箱", msg.as_string())
server.quit()
二、函数使用
2.1 基本函数
# 形参的使用
def fucn(*args, **kwargs):
print(args,kwargs)
fucn(11, 12 )
fucn(11, 12, name="haha", age=19)
fucn([11, 12, 33], {"k1": 1, "k2": 13})
# 函数结果
(11, 12) {}
(11, 12) {'name': 'haha', 'age': 19}
([11, 12, 33], {'k1': 1, 'k2': 13}) {}
(11, 12, 33) {'k1': 1, 'k2': 13}
2.2 匿名函数
基于lambda定义的函数格式为:lambda 参数:函数体
lambda x:函数体
lambda x,y:函数体
lambda *args, **kwargs:函数体
######例子
fucn = lambda x: x+10
v1 = fucn(10)
print(v1)
三元运算
num = input("请输入名字:")
data = "臭不要脸" if "苍老师" in num else "正经人"
print(data)
## 结果 = 条件成立 if 条件 else 条件不成立
2.3 生成器
import random
def gen_random_num(max_count):
counter = 0
while counter < max_count:
yield random.randint(1000, 9999)
counter += 1
data_list = gen_random_num(300000000)
# 在使用时,去data_list中获取即可
# next(data_liat)
2,4 模块导包
# from 文件夹.python文件 import 函数名
###########################
# 找其他包 import sys
# sys.path.append("D:/xx")
# import x1.....
###########相对路径##############
###########在pycharm中可自动添加##############
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
2.5 文件注释
# 创建一个__init__.py文件添加注释
2.6 json格式转换
# 将json格式转换为python格式
import json
data_dic = json.load(re.text)
# 将python转换为json格式
import json
data_dic = json.dumps(data)
###########例子############
import json
from decimal import Decimal
from datetime import datetime
data = [
{"id": 1, "name": "heh", 'size': Decimal("18.99"), 'ctime': datetime.now()},
{"id": 2, "name": "www", 'size': Decimal("9.99"), 'ctime': datetime.now()}
]
class MyJSONEncoder(json.JSONEncoder):
def default(self, o):
if type(o) == Decimal:
return str(o) # 字符串
elif type(o) == datetime:
return o.strftime("%Y-%M-%d")
return super().default(o)
res = json.dumps(data, cls=MyJSONEncoder)
print(res)
2.7 正则表达式
import re
text = "拉欧著牛逼, 在线要333232332.@qq.com, 手机号是13829323293"
# \ 转义字符 d 代表数字
phone_list = re.findall("1[3|5|8|9]\d{9}", text)
print(phone_list)
# 找固定的字符
phone_list = re.findall("[abc]", text)
# 固定一个字符q
phone_list = re.findall("q[abc]", text)
# 除了abc之外的字符
phone_list = re.findall("[^abc]", text)
三、对象的了解
3.1 简单对象了解
class Message:
def send_email(self, email, content):
data = "给{}发邮件, 内容是: {}".format(email, content)
print(data)
msg_object = Message() # 实例化对象
msg_object.send_email("hehhhe.com", "注册成功")
3.2 三大方法
封装, 继承, 多态
继承:(支持多继承)
class Father:
def send_email(self):
print("我是父类")
class Son(Father):
def inses_email(self):
print("我是子类")
son_objiect = Son()
son_objiect.send_email()
son_objiect.inses_email()
多态:含有send()方法
静态方法: 在函数上添加 :@staticmethod
绑定方法: 函数中默认有 def send(self):
3.3 成员 属性
再绑定方法上添加 :@property 调用的时候就不用加 “方法()”了
3.4 成对方法
在方法中:
# __enter__ 和__exit__是成对出现的
# 前者是来凝结数据库,后者是关闭数据库
3.5 迭代器
定义:
1. 类中定义了__iter__和__next__两个方法
2. __iter__方法需要返回对象本身
3. __next__方法,返回下一个数据,如果没有数据,则需要抛出一个StopIteration异常