当前位置:   article > 正文

Python(乱学)

Python(乱学)

 

 

字典在转化为其他类型时,会出现是否舍弃value的操作,只有在转化为字符串的时候才不会舍弃value

注释的快捷键是ctrl+/

字符串无法与整数,浮点数,等用加号完成拼接

5不入???

还有一种格式化的方法

不限制类型,不做精度的控制

type()

判断的条件应是bool类型

仅仅是空格则不行

想要规范一些,就要遵循一些格式

必须在赋值之前声明为全局变量

del仅仅完成删除的操作

像append,extend都是不可以用的,因为元组不可以修改

传入的’12‘会被划分为两个小字符串’1‘’2‘

集合没有下表索引,故.pop不能指定下标来进行取出,而列表可以

集合不支持下标索引

字典不允许Key 的重复

list,tuple,setstring是没有办法去转化成字典的,但字典是可以转换成别的容器的,转换成字符串字典不会丢失value,转换成其他类型,字典会丢失value

容器的通用排序功能

排序的结果会变成列表对象

python函数进阶

(1)函数的多返回值

(3)匿名函数

2.函数的多种传参方式

(1)掌握位置参数
(2)关键字参数
(3)不定长参数
(4)缺省参数

位置参数与其他传参进行混用时,需要写在最前面,不然就会出现语法错误

默认参数必须定义在最后面

位置传递

kw指keyword

匿名函数

1.函数作为参数传递

实际上传入的是代码的执行逻辑

2.lambda匿名函数

默认直接return ,不用写return语句

并且没有办法进行回车换行写多行

python文件操作

了解编码

了解文件的操作

encoding参数在函数定义中并不是第3位,所以要使用关键字传参

f是对文本文件进行操作功能的对象

w:覆盖写入

read()得到的类型是字符串

这里的strip是为了去除换行符

文件的追加操作

应先换行再进行追加

文件操作案例:实现文件的备份操作

Python异常,模块与包

except(),这个括号是元组

所以的异常都是基于这个顶级的异常Exception

当捕获Exception时,所有的异常都可以捕获到

finally和exception都是可选的

异常的传递

故捕获异常时并不需要从真正出现异常的那一行开始捕获

python模块

模块的导入

[ ]表示的都是可选的意思

例:from time import *相较于直接import time的不同在于

前者可以直接使用内部的函数sleep(),而后者需要time.sleep()

“.”是用于确定层级关系的

给导入的功能设置一个别名

自定义模块

模块名要符合标识符的命名规则

这种定义函数的写法应再了解一下

右键run 的时候内置函数__name__就会被标记为__main__,故if语句成立,执行

python文件都存在__name__的这个内置变量

当以from的模块导入运行的时候,模块内部的__name__不会被标记为__main__

上图在主函数只能够使用test_A(),而不能使用test_B(),__all__指向列表

但可以自行导入未包含在__all__内的函数,

但是__all__不会限制你直接导,from my_module import pr1,就可以使用pr1

python包

(1)自定义包

(2)如何安装第三方包

只有__init__.py文件存在于文件夹当中,那么这个文件夹就是python包,否则就是一个普通的文件夹

可以直接深入到对应的模块函数

安装第三方包

json数据格式

什么是json

如何使用json进行数据转化

json如果是列表的话,要求其元素一定是字典

如果为true,中文就会转化为unicode字符了

注:

pyecharts模块介绍

https://05x-docs.pyecharts.org/#/zh-cn/

https://gallery.pyecharts.org/#/README

pyecharts快速入门

构建一个基础的折线图

使用全局配置项设置属性

构建基础的折线图

使用全局配置项设置属性

数据处理

通过json模块对数据进行处理

  1. import json
  2. f_us = open("D:/美国.txt","r",encoding="UTF-8")
  3. f_us_data = f_us.read()#读取数据成字符串
  4. f_us_data = f_us_data.replace("jsonp_1629344292311_69436(","")#删除开头不需要的部分
  5. f_us_data = f_us_data[:-2]#删除结尾的部分
  6. f_us_dict = json.loads(f_us_data)#转换为字典
  7. trend_data = f_us_dict["data"][0]["trend"]#将范围缩小到“trend”
  8. x_data = trend_data["updateDate"][:314]#拿到日期数据
  9. y_data = trend_data["list"][0]["data"][:314]#拿到“确诊”数据

创建折线图

  1. import json
  2. from pyecharts.charts import Line
  3. from pyecharts.options import TitleOpts,LabelOpts
  4. f_us = open("D:/美国.txt","r",encoding="UTF-8")
  5. f_jp = open("D:/日本.txt","r",encoding="UTF-8")
  6. f_in = open("D:/印度.txt","r",encoding="UTF-8")
  7. f_us_data = f_us.read()#读取数据成字符串
  8. f_jp_data = f_jp.read()
  9. f_in_data = f_in.read()
  10. f_us_data = f_us_data.replace("jsonp_1629344292311_69436(","")#删除开头不需要的部分
  11. f_jp_data = f_jp_data.replace("jsonp_1629350871167_29498(","")
  12. f_in_data = f_in_data.replace("jsonp_1629350745930_63180(","")
  13. f_us_data = f_us_data[:-2]#删除结尾的部分
  14. f_jp_data = f_jp_data[:-2]
  15. f_in_data = f_in_data[:-2]
  16. f_us_dict = json.loads(f_us_data)#转换为字典
  17. f_jp_dict = json.loads(f_jp_data)
  18. f_in_dict = json.loads(f_in_data)
  19. us_trend_data = f_us_dict["data"][0]["trend"]#将范围缩小到“trend”key
  20. jp_trend_data = f_jp_dict["data"][0]["trend"]
  21. in_trend_data = f_in_dict["data"][0]["trend"]
  22. us_x_data = us_trend_data["updateDate"][:314]#拿到日期数据,并取到2020年的12月31号
  23. jp_x_data = jp_trend_data["updateDate"][:314]
  24. in_x_data = in_trend_data["updateDate"][:314]
  25. us_y_data = us_trend_data["list"][0]["data"][:314]#拿到“确诊”数据
  26. jp_y_data = jp_trend_data["list"][0]["data"][:314]
  27. in_y_data = in_trend_data["list"][0]["data"][:314]
  28. line = Line()
  29. line.add_xaxis(us_x_data)
  30. line.add_yaxis("美国确诊人数",us_y_data,label_opts=LabelOpts(is_show=False))
  31. line.add_yaxis("日本确诊人数",jp_y_data,label_opts=LabelOpts(is_show=False))
  32. line.add_yaxis("印度确诊人数",in_y_data,label_opts=LabelOpts(is_show=False))
  33. line.set_global_opts(
  34. title_opts=TitleOpts(title="2020年美印日三国的确诊人数对比折线图",pos_left="center",pos_bottom="1%")#设置标题居中朝下
  35. )
  36. line.render()#生成图表
  37. f_us.close()
  38. f_in.close()
  39. f_jp.close()

地图可视化

基础地图使用

  1. from pyecharts.charts import Map
  2. from pyecharts.options import VisualMapOpts
  3. map = Map()
  4. data = [
  5. ('北京市', 99),
  6. ('上海市', 199),
  7. ('重庆市', 200),
  8. ('四川省', 399),
  9. ('广东省', 499)
  10. ]
  11. map.add("地图",data,"china")#添加数据
  12. #设置全局选项
  13. map.set_global_opts(
  14. visualmap_opts=VisualMapOpts(
  15. is_show=True,
  16. is_piecewise=True,
  17. pieces=[
  18. {"min":1,"max":9,"label":"1-9","color":"#CCFFFF"},
  19. {"min":10,"max":99,"label":"10-99","color":"#FF6666"},
  20. {"min":100,"max":500,"label":"100-500","color":"#990033"}
  21. ]
  22. )
  23. )
  24. map.render()#生成地图数据

疫情地图-国内疫情地图

  1. import json
  2. from pyecharts.charts import Map
  3. from pyecharts.options import VisualMapOpts
  4. map = Map()
  5. f = open("D:/疫情.txt","r",encoding="UTF-8")
  6. data_str = f.read()#读取全部数据
  7. f.close()
  8. data_dict = json.loads(data_str)#将json转化为字典
  9. province_list = data_dict["areaTree"][0]["children"]#将每个省的数据都封装入列表中
  10. data_list = []#设定数据列表
  11. for province_data in province_list:
  12. province_name = province_data["name"]#省份名称
  13. province_confrm = province_data["total"]["confirm"]#每个省份的确诊人数
  14. data_list.append((province_name,province_confrm))#将数据压入到数据列表中
  15. print(data_list)
  16. map.add("地图",data_list,"china")#添加数据
  17. #设置全局选项
  18. #注意现在的pyechats显示地图数据需要写省份的全名,不然不会显示数据,这里由于省份数量过多,就不进行添加了
  19. map.set_global_opts(
  20. visualmap_opts=VisualMapOpts(
  21. is_show=True,
  22. is_piecewise=True,
  23. pieces=[
  24. {"min":1,"max":9,"label":"1-9","color":"#CCFFFF"},
  25. {"min":100,"max":999,"label":"100-999","color":"#FFFF99"},
  26. {"min":1000,"max":4999,"label":"1000-4999","color":"#FF9966"},
  27. {"min":5000,"max":9999,"label":"5000-9999","color":"#FF6666"},
  28. {"min":10000,"max":99999,"label":"10000-99999","color":"#CC3333"},
  29. {"min":100000,"label":"100000+","color":"#990033"}
  30. ]
  31. )
  32. )
  33. map.render("全国疫情地图数据.html")#生成地图数据

疫情地图-省级疫情地图

  1. import json
  2. from pyecharts.charts import Map
  3. from pyecharts.options import VisualMapOpts,TitleOpts
  4. f = open("D:/疫情.txt","r",encoding = "UTF-8")
  5. data = f.read()
  6. data_dict = json.loads(data)
  7. henan_data = data_dict["areaTree"][0]["children"][3]["children"]
  8. area_list = []
  9. area_list.append(("济源市",5))
  10. for area_data in henan_data:
  11. area_name = area_data["name"]+"市"
  12. area_confirm = area_data["total"]["confirm"]
  13. area_list.append((area_name,area_confirm))
  14. map = Map()
  15. map.add("河南",area_list,"河南")
  16. map.set_global_opts(
  17. title_opts=TitleOpts(title="河南省疫情地图",pos_bottom="1%",pos_left="center"),
  18. visualmap_opts=VisualMapOpts(
  19. is_show=True,
  20. is_piecewise=True,
  21. pieces=[
  22. {"min":1,"max":99,"label":"1-99","color":"#CCFFFF"},
  23. {"min":100,"max":999,"label":"100-999","color":"#FFFF99"},
  24. {"min":1000,"max":4999,"label":"1000-4999","color":"#FF9966"},
  25. {"min":5000,"max":9999,"label":"5000-9999","color":"#FF6666"},
  26. {"min":10000,"max":99999,"label":"10000-99999","color":"#CC3333"},
  27. {"min":100000,"label":"100000+","color":"#990033"}
  28. ]
  29. )
  30. )
  31. map.render("河南省疫情分布图.html")

动态柱状图

基础柱状图

  1. from pyecharts.charts import Bar
  2. from pyecharts.options import LabelOpts
  3. bar = Bar()
  4. bar.add_xaxis(["Akebi","Komichi","Hobert"])
  5. bar.add_yaxis("age",[15,15,19],label_opts=LabelOpts(position = "right"))#将Y轴的数据标签显示在最右侧
  6. bar.reversal_axis()#反转XY轴,从左往右显示
  7. bar.render()

基础时间线柱状图

基础时间线配置动态图表

主题更改颜色样式

  1. from pyecharts.charts import Bar,Timeline
  2. from pyecharts.options import LabelOpts
  3. from pyecharts.globals import ThemeType
  4. bar1 = Bar()
  5. bar1.add_xaxis(["Akebi","Komichi","Hobert"])
  6. bar1.add_yaxis("age",[15,15,19],label_opts=LabelOpts(position = "right"))#将Y轴的数据标签显示在最右侧
  7. bar1.reversal_axis()#反转XY轴,从左往右显示
  8. bar2 = Bar()
  9. bar2.add_xaxis(["Akebi","Komichi","Hobert"])
  10. bar2.add_yaxis("age",[20,20,25],label_opts=LabelOpts(position = "right"))#将Y轴的数据标签显示在最右侧
  11. bar2.reversal_axis()#反转XY轴,从左往右显示
  12. bar3 = Bar()
  13. bar3.add_xaxis(["Akebi","Komichi","Hobert"])
  14. bar3.add_yaxis("age",[23,23,28],label_opts=LabelOpts(position = "right"))#将Y轴的数据标签显示在最右侧
  15. bar3.reversal_axis()#反转XY轴,从左往右显示
  16. timeline = Timeline({"theme":ThemeType.LIGHT})#设置主题颜色
  17. timeline.add(bar1,"点1")
  18. timeline.add(bar2,"点2")
  19. timeline.add(bar3,"点3")
  20. #自动播放设置
  21. timeline.add_schema(
  22. play_interval=1000, #自动播放的时间间隔
  23. is_timeline_show=True, #是否显示时间线
  24. is_auto_play = True, #是否自动播放
  25. is_loop_play=True #循环
  26. )
  27. timeline.render()#改用时间线进行绘图

GDP动态柱状图

  1. """
  2. 定义lambda函数的形式
  3. """
  4. list1 = [["Akebi",15],["Komichi",13],["Hobert",19]]
  5. list1.sort(key = lambda x:x[1],reverse=False)#设置排序的依据为导入的列表元素的下标为1的元素
  6. print(list1)
  7. """
  8. 普通定义函数的形式
  9. """
  10. list1 = [["Akebi",15],["Komichi",13],["Hobert",19]]
  11. def fuc(x):
  12. return x[1]#将下标1返回按照数字进行排序
  13. list1.sort(key = fuc,reverse=False)#函数传参,只需传入函数名即可
  14. print(list1)

导入csv格式的数据

ANSI表示WINDOWS模式下的默认编码格式,即表示跟随操作系统的语言版本变化的

win11是中文,那么默认的中文编码就是GB2312

字典中的key如果不存在,对其调用就会报错

  1. from pyecharts.charts import Bar,Timeline
  2. from pyecharts.options import *
  3. from pyecharts.globals import *
  4. f = open("D:/1960-2019全球GDP数据.csv","r",encoding = "GB2312")
  5. data_lines = f.readlines()
  6. data_lines.pop(0)#要注意使用pop方法的格式
  7. data_dict = {}
  8. for line in data_lines:
  9. year = int(line.split(",")[0])#要将年份转换为整型
  10. country = line.split(",")[1]
  11. GDP = float(line.split(",")[2])#可以将科学计数法的数用float进行转换
  12. try:
  13. data_dict[year].append([country,GDP])
  14. except Exception:#由于字典中如果没有对应的key,却进行了调用,程序会报错,利用捕获,就可以判断是否有key,并进行赋值操作
  15. data_dict[year] = []
  16. data_dict[year].append([country,GDP])
  17. sort_year_list = sorted(data_dict.keys())
  18. timeline = Timeline({"theme":ThemeType.LIGHT})
  19. for year in sort_year_list:
  20. data_dict[year].sort(key=lambda x:x[1],reverse = True)
  21. x_data = []
  22. y_data = []
  23. for country_gdp in data_dict[year][0:8]:
  24. x_data.append(country_gdp[0])
  25. y_data.append(country_gdp[1]/100000000)#单位为亿
  26. x_data.reverse()
  27. y_data.reverse()
  28. bar = Bar()
  29. bar.add_xaxis(x_data)
  30. bar.add_yaxis("GDP(亿)",y_data,label_opts=LabelOpts(position="right"))
  31. bar.reversal_axis()
  32. bar.set_global_opts(#设置标题
  33. title_opts=TitleOpts(title=f"{year}年世界前8GDP数据")
  34. )
  35. timeline.add(bar,str(year))
  36. #设置自动播放
  37. timeline.add_schema(
  38. play_interval=1000,
  39. is_auto_play=True,
  40. is_loop_play=True,
  41. is_timeline_show=True
  42. )
  43. timeline.render()

初识对象

成员方法

函数是写在类的外面的

而方法是定义在类的里面的函数

类和对象

面向对象,简单来说,就是让对象按命令去干活

构造方法

其他内置方法(魔术方法)

将类对象变成字符串

在def __str_的“return”可以修改输出字符串的类型

">"和"<",不能直接比较两个类对象

other 表示的是另一个用于比较的对象

lt不支持小于等于和大于等于

"=="该符号默认比较内存地址

而"__eq__"则可以实现成员变量间的比较

封装

将现实世界的事物封装到了程序的内部

私有成员可以通过运行其他成员而执行

私有成员和方法是没有办法被类对象直接使用的

但在创建类的时候,却可以进行使用

继承

继承的基础语法

pass关键字用于补全语法,保证定义的完整性

在子类调用父类的成员

复写和使用父类成员

self相当于C++中的this指针

super其实是指父类的意思

运用场景:

父类拥有部分功能,子类在父类的基础上拓展了相应的功能,但要沿用父类的一些功能可以直接调用父类成员,不用重写

类型注解

变量的类型注解,函数(方法)和返回值的类型注解

函数(方法)的类型注解

形参注解

返回值注解

 

alt+回车=导入函数包

json.loads可以将字符串格式转变为字典格式

注解写错并不会产生运行的问题

Union类型

需要先进行导包

多态

同一种行为,不同的运行状态

 以标准来约束某些行为

抽象类用于顶层设计 ,以便子类做具体的实现。

也是对子类的一种软性约束,要求子类必须复写(实现)父类的一些方法

有了标准后,真正工作的是其子类

这里在定义好类后,一定要记得创建子类的对象,然后用子类创建的对象进行传参

定义函数的类型注解的是父类对象,实际上传入的是子类对象(由于子类将父类的方法进行了复写)

综合案例

在本案例的实现过程中,我犯了很多经典错误,导致浪费了大量的时间

我用python的内置类型名list作为变量名,导致出错,自定义类无法正常调用

源码文件

data_save.py

  1. class Record:
  2. def __init__(self,time,date,name):
  3. self.time = time
  4. self.date = date
  5. self.name = name
  6. def __str__(self):
  7. return f"{self.time},{self.date},{self.name}"
  8. # def __call__(self, *args, **kwargs):
  9. # return f"{self.time},{self.date},{self.name}"
  10. #利用__str__将print(record)的数据转换为自定义类型

 file_def.py

  1. from date_save import Record
  2. import json
  3. class AC :#定义抽象类,实现顶层设计
  4. def readFile(self):#读取文件数据,读到的每一条数据都转换为Record对象,将他们都封装到list返回即可
  5. pass
  6. class File1(AC):
  7. def __init__(self,path): #定义成员变量记录文件的路径
  8. self.path = path
  9. def readFile(self):
  10. f1 = open(self.path,"r",encoding="UTF-8")
  11. record_list = []
  12. for i in f1.readlines(): #括号里不需要加内容
  13. i = i.strip()#消除每一行读取到的\n
  14. i_list = i.split(",")
  15. record = Record(i_list[0],int(i_list[1]),i_list[2])
  16. record_list.append(record)
  17. f1.close
  18. return record_list
  19. class File2(AC):
  20. def __init__(self,path):
  21. self.path = path
  22. def readFile(self):
  23. f1 = open(self.path,"r",encoding="UTF-8")
  24. record_list = []
  25. for i in f1.readlines():
  26. data_dict = json.loads(i)#读取一行就转换一行
  27. record = Record(data_dict["time"],int(data_dict["data"]),data_dict["name"])
  28. record_list.append(record)
  29. f1.close()
  30. return record_list
  31. if __name__ == '__main__':
  32. file1 = File1("D:/Akebi.txt")
  33. file2 = File2("D:/Komichi.txt")
  34. list1 = file1.readFile()
  35. list2 = file2.readFile()#json的数据格式一定检查,str在json数据中一定要用" ",可以写成字典的形式
  36. for l in list1:
  37. print(l)
  38. for l in list2:
  39. print(l)
  40. # print(list1)
  41. # print(list2)

main.py

  1. from file_def import File1,File2
  2. from date_save import Record
  3. from pyecharts.charts import Bar
  4. from pyecharts.options import *
  5. from pyecharts.globals import ThemeType
  6. file1 = File1("D:/Akebi.txt")
  7. file2 = File2("D:/Komichi.txt")
  8. list1 = file1.readFile()
  9. list2 = file2.readFile()
  10. all_list: list[Record] = list1+list2
  11. data_dict = {}
  12. for record in all_list:
  13. if record.time in data_dict.keys():
  14. data_dict[record.time] +=record.date
  15. else:
  16. data_dict[record.time] = record.date
  17. # print(list(data_dict.keys()))
  18. # dict = {"Akebi":14,"Komichi":13}
  19. # print(data_dict.keys())
  20. # print(data_dict.values())
  21. print(data_dict)
  22. print(data_dict.keys())
  23. print(list(data_dict.keys()))
  24. bar = Bar()
  25. bar.add_xaxis(list(data_dict.keys()))
  26. bar.add_yaxis("爆金币",list(data_dict.values()),label_opts=LabelOpts(is_show=False))
  27. bar.render("爆金币的柱状图.html")

SQL

数据库介绍

MySQL安装

MySQL的使用

show databases ;

8.0.36版本的要在分号前加个空格 

前三个数据库是供MySQL内部使用的,dbeaver为防止误操作,将前三个库进行了隐藏

SQL基础与DDL

 DML插入,删除,更新的语法

[ ]表示的意思是可选,即可写可不写

DQL 

基础查询

*一般代表通配符的意思

分组聚合

 

前面字段(非聚合函数)写了其他的列会报错 

count(*):按性别来分,有几行就数几行

排序分页 

ASC表示升序,默认的升序可以不写 

limit 10,5 :表示跳过前面的十条直接从第十一条开始,往后取5条

python操作数据库 

基础使用

非查询性质的SQL语句 

 

执行查询性质的SQL语句 

 

数据插入

 综合案例 

main.py

  1. from pymysql import Connection
  2. from file_def import File1,File2
  3. from date_save import Record
  4. from pyecharts.charts import Bar
  5. from pyecharts.options import *
  6. from pyecharts.globals import ThemeType
  7. file1 = File1("D:/Akebi.txt")
  8. file2 = File2("D:/Komichi.txt")
  9. list1 = file1.readFile()
  10. list2 = file2.readFile()
  11. all_list: list[Record] = list1+list2
  12. conn = Connection(
  13. host = "localhost",
  14. port = 3306,
  15. user = "root",
  16. password = "5549186862XHBabc",
  17. autocommit = True
  18. )
  19. cursor = conn.cursor()#获取游标对象
  20. conn.select_db("Komichi")#选择数据库
  21. for record in all_list:#组织sql语句
  22. sql = f"insert into orders(my_time,my_data,name) values ('{record.time}',{record.date},'{record.name}')"
  23. cursor.execute(sql)#执行sql语句
  24. conn.close()

data_save.py

file_def.py

(这两个代码文件可以到上一个综合案例来看)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/500578
推荐阅读
相关标签
  

闽ICP备14008679号