简录

第一节 基础

  1. 占位符
  • 语法
    str1 = 'i'
    str2 = 'love'
    str3 = 'you'
    '%s %s %s' % (str1,str2,str3)

  • 效果

    'i love you'

1.1 join

''.join(['1','2','3'])
' '.join(['1','2','3'])
'*'.join(['1','2','3'])
' '.join([str1,str2,str3])
  • 效果

    '123'
    '1 2 3'
    '123'
    'i love you'

  1. format
  • 语法

    '{:<10}'.format(123) #左对齐
    '123 '
    '%d' % 12.33 #取整
    '12'
    '{}'.format(1,2,3)
    '1'
    print('%r' % '123')
    '123'
    '{:^5}'.format(1)
    ' 1 '
    '{:0^5}'.format(1)
    '00100'
    '{:*^5}'.format(1)
    '1'

    '请输入>>{}'.format(1)
    '请输入>>1'
    a = '请输入>>{}'.format
    a(1)
    '请输入>>1'
    a(3)
    '请输入>>3'
    '{{hello {}}}'.format('python')
    '{hello python}'
    '{{好 {}}}'.format('啊')
    '{好 啊}'

    '{}{}{}'.format(str1,str2,str3)
    'iloveyou'
    '{}{}{}'.format(str1,str2,3)
    'ilove3'
    '{} {} {}'.format(str1,str2,3)
    'i love 3'
    '{2} {1} {0}'.format(str1,str2,3)
    '3 love i'
    '{0} {0} {0}'.format(str1,str2,3)
    'i i i'

    '%-6.2f'%10.3 #左对齐
    '10.30'
    '%10d'%12.4 #取整
    ' 12'
    '%10.5f'%12.4 #先精确后补位
    ' 12.40000'

  1. 虚拟机命令
  • 小火车 : sl
  • cmatrix : 代码雨 # sudo apt install cmatrix
  • tree:目录树 #tree / :根目录树 sudo apt install tree
  • Ctrl + c :退出
  • top : 任务管理器 #htop : 任务管理器(彩色;第一次需要安装 # sudo apt install htop
  • -进入Python 
    dir(__builtins__)   查看Python全部内置函数
    import keyword;  kyword.kwlist    查看关键字
    
  • a = 1
    type(a)   查看a的类型
    id(a)     查看内存地址
    help()    查看帮助文档
    

4.强制类型转换

str([1,2,3])         强制转换成字符串
tuple([1,2,3])         强制转换成元组
  1. 列表方法
  • dir () 查看方法

  • li = [1,2,3,4]
    

  • li.append(5) 效果: [1,2,3,4,5]
    li.extend([6]) [1,2,3,4,5,6]
    li.insert(0,'c') '0'索引位置,‘c’需要加的内容 ['c',1,2,3,4,5,6]

  • li.pop(0) 删除索引位置的值 [1,2,3,4,5,6]
    li.remove(6) 指定删除 [1,2,3,4,5]
    li.clear() 清空列表

  • li[0] = False 索引修改 [False,2,3,4,5]
    li.index(4) 查看索引 3
    li.count(5) 查看值出现的次数 1

  • li.reverse()    内容倒数
    li.sort()       自动排序
    
  1. 元组方法

    tu = (1,2,3,4)
    tu.count(4) 查看值出现的位置(索引)
    tu.index(4) 查看值出现的次数

7.字符串

  • s = ' a123456b '
    s.find('4')           3        查看索引    
    s.isdigit()           True    查看是否都是数字
    '123asdf'.isdigit( )  False   是否全是数字
    '123asdf'.isalpha( )  False   是否全是英文
     '123asdf'.endswith( '1') False       是否以某个值结束
    '123asdf'.startswith('1')  True     是否以某个值开始
    s.upper()                           全部变大写
    s.lower()                           全部变小写
    len(s)            10                查看元素个数
    s.capitalize()                      首字母大写
    s.lstrip()                          去掉左边的空格
    s.rstrip()                          去掉右边的空格
    s.strip()                           去掉前后空格
    
  1. 集合
  • se = {1,2,3,4}
    se1 = {2,3,4,5}
    se&se1   取两个集合的交集    {2,3,4}
    se|se1   合并两个集合
    
  1. 文件导入的大致过程

    模块就是一个py文件

    我们需要更好的管理代码的方式 一处写,多处使用

    import ... 直接导入

    import ...as... 导入后,为导入后的对象指定名称 例如:import random as jj

    from ..import..as.. 从..中导入某个对象,导入后,为导入后的对象指定名称 例如:from random import rand as gg

    open函数会负责打开一个文件并返回一个文件对象 f = open(r'myfile.txt')
    f这个就是表示myfile.txt这个文件对象。我们可以操作这个文件

    f.close :关闭当前文件

    with open('myfile.txt') as f
    print(f)
    #xx
    #dd

    • with能够帮助我们自动关闭文件

    with open('myfile.txt',mode = 'r') as f
    contents = f.read() #读取全部 f.readlines
    print('contents')

    'r‘模式打开一个不存在的文件会报错
    'w'模式或'a'模式打开一个不存在的文件就创建一个文件
    f.flush() 强制将数据输入文件(建议每次write完都flush)

10.正则

  • 其实就是一个字符串,这个字符串里面写了一些模式,一些特定的样子 能够用正则表示一些特定的模式的子串
  • 判断用户注册账号是否满足格式 抓取页面中的连接

10.1 元字符

  • 在正则中有特殊功能
  • 常用元字符有
  • .   通配
    ^   开头
    $   结尾
    {}  重复
    *   重复
    +   重复
    ?   重复、非贪婪
    |   选择
    []  选择
    

10.2 锚点元字符

  • 锁定行首: ^ 托字符 标识行首
  • 锁定行尾: $
  • 单词边界(不是元字符):\b
  • import re   #python内置模块,可操作正则语言
    res = re.findall(r'\ddog\d','you are dog withdoggie')     #\ddog\d   # 匹配完整单词
    

10.3 重复元字符

  • import re
    
    res = re.findall('a{3}c','abbbc')  a与c之间只能是三个字
    res = re.findall('a{3,}c','abbbc')  a与c之间只能是大于等于三个字
    res = re.findall('a{3,6}c','abbbc')    a与c 之间只能是三到六个字
    res = re.findall('a{,6}c','abbbc')  a与c 之间只能是小于等于六个字
    print(res)
    res = re.findall('ab?c','abc')    ? 如{0,1} 表示一个或没有   可能输出ac   abc
    res = re.findall('a+c','abc')     + 如{1,}表示一个或多个  
    res = re.findall('a*c','abc')     *  如{0,}表示任意多个
    

10.4 选择元字符

res = re.findall('ab|dc','abc')   | 输出要么是abc要么是adc
res = re.findall('a(b|d)c','adc')  提取b或则d  输出'b'或则'd'
res = re.findall('a[bed]c','abc')  []  方括号里面对的 只能代替一个输出  可能是 abc aec adc
res = re.findall('a[a-z]c','ahc')  取a-z中任意一个
res = re.findall('a[0-9]c','a6c')  取0-9中任意一个
res = re.findall('a[A-Z]c','aDz')  取A-Z中的任意一个大写
res = re.findall('a[^de]c','afc')  除了de外取任意一个

10.5 预定义字符类

\b  任意一数字字符     [0-9]
\D  任意一非数字字符   [^0-9]
\s  任意一空字符       [\t\n\x0B\f\r]
\S  任意一非空字符     [\t\n\x0B\f\r]
\w  任意字母数字字符   [a-zA-Z0-9]
\W  任意非字母数字字符   [^a-zA-Z0-9]
  • 分组:我们要从满足格式的文本中,获取某个部分的数据,那么就要用分组

11.MongoDB

大于 $gt

小于 $lt

等于 $eq

大于等于 $gte

小于等于 $lte

不等于 $ne

db.student.insert([
   {'name': ' a',  'age': 10},
   {'name': ' b',  'age': 15},
   {'name': ' c',  'age': 20},
   {'name': ' d',  'age': 25},
]);
#例如:
db.student.find({'age':{$gt:15}});
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e6"), "name" : " c", "age" : 20 }
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e7"), "name" : " d", "age" : 25 }
> db.student.find({'age':{$lt:15}});
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e4"), "name" : " a", "age" : 10 }
> db.student.find({'age':{$lte:15}});
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e4"), "name" : " a", "age" : 10 }
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e5"), "name" : " b", "age" : 15 }
> db.student.find({'age':{$gte:15}});
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e5"), "name" : " b", "age" : 15 }
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e6"), "name" : " c", "age" : 20 }
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e7"), "name" : " d", "age" : 25 }
> db.student.find({'age':{$ne:15}});
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e4"), "name" : " a", "age" : 10 }
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e6"), "name" : " c", "age" : 20 }
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e7"), "name" : " d", "age" : 25 }

# 与         $and
# 或         $or
# 条件     $where
# 正则     $regex

db.student.insert([
   {'name': ' a',  'age': 10, 'gender':'F'},
   {'name': ' b',  'age': 15, 'gender':'M'},
   {'name': ' c',  'age': 20, 'gender':'M'},
   {'name': ' d',  'age': 25,'gender':'F'},
]);

12.线程

优点:消耗内存相对较少

缺点:轮着执行的,所以不能充分利用CPU性能

import threading
from threading import Lock  从threading 导入锁

lock.Lock()  
lock.acquire  #上锁 
lock.release  #释放锁

def fib(n):
    if n == 1 or n ==2:          #缩短执行时间
        return 1
    return fib(n-1)+fib(n-2)

13.进程

缺点:消耗内存较大

优点:可以充分利用CPU

进程,只用在占满CPU上,会开一个进程池(大小是你的CPU个数),再每个进程里在创建线程85%的网站。

如果只有进程个数大于CPU,对所有的CPU核心而言,都是抢占式的,对所有的进程,他们都在排队。

14.生成器

作用,就是能够用函数的写法写出可以迭代对象

一旦!我们的函数里面用了yield语法,就不是一个函数了,而是一个“生成器函数”,生成器函数的作用并不是执行逻辑,而是返回“生成器”。

yield和return类似,将数据作为返回值,返回到外面,不一样的地方是,他不会中止函数,而是暂停函数。可以让“函数”多次返回值。

一旦生成器执行到结尾,那么就会引发一个异常Stoplteration

生成器的应用:

如果我希望在函数里面返回多次数据,我肯定是希望得到了一个数据返回出来以后需,先去处理这个数据,然后再找这个数据要下一次的数据。对那些需要等待一段时间才能拿到数据的情况,尤为有用。因为可以先暂停当前的函数,也就不会阻塞了,因此可以更大程度提高并发;

15.Mysql

#进去MySQL:
	第一种:mySQL -uroot -pqwe123;
	第二种:mysql -uadmin -pRoot110qwe
#退出:exit

15.1 库、表级

显示所有库:SHOW DATABASES;

创建库: CREATE DATABASE +库名;

切换&使用这个库: USE +库名;

删除当前数据库: DROP DATABASE +库名;

   USE+库名   进入库之后

创建表:

CREATE TABLE students(
id int(11) unsigned NOT NULL  AUTO_INCREMENT,
name varchar(30) NOT NULL,  
`number` char(9) NOT NULL,  
gender bit(1) DEFAULT b'0',
phone char(11) NOT NULL,  
tzazzcount varchar(20)NOT NULL,  
qq varchar(12),
wechat varchar(30),
`power` smallint(6) NOT NULL,  
actrecv smallint(6) NOT NULL, 
UNIQUE KEY(id),    #唯一
UNIQUE KEY(`number`), 
UNIQUE KEY(phone), 
UNIQUE KEY(tzazzcount), 
UNIQUE KEY(qq), 
UNIQUE KEY(wechat),
PRIMARY KEY (id)  #唯一且能为空     表中止能有一个
 );

类型 含义
整数 int/smallint
字符串 char/varchar
位 bit

约束 含义
不能为空 NOT NULL
不能重复 UNIQUE KEY
非空且唯一 (主键) PRIMARY KEY
无符号(非负) unsigned
自增长 (只能用在主键或唯一键当中 ) AUTO_INCREMENT

显示所有表: SHOW TABLES

显示表创建的信息: SHOW CREATE TABLE + 表名;

删除表: DROP TABLE + 表名;

指定表及字段: INSERT INFO + 表名 VALUES();

INSERT INFO students VALUES(1,'tuple','20181001',b'0','13521344');

指定插入:

INSERT INTO students(name,number,phone) VALUES('刘金全','201807504','18212961845');

查表:

SELECT * FROM +表名 ;

指定查:

SELECT name,phone FROM students;

筛选表中部分记录:

SELECT * FROM students WHERE name='tom';

移除表中所有记录:

DELETE FROM students WHERE 1;

按条件来删除记录:

DELETE FROM students WHERE name='  ';

更新所有数据:

UPDATE students SET  gender=b'1'  WHERE name='xiaoli';

更新多个数据:

UPDATE students SET genter=b'1' ,name='xiaowang'

 WHERE name='xiaowang';

is_delete=0 

比较运算:

等于 =
不等于 !=
大于 >
大于等于 >=
小于 <
小于等于 <=

SELECT * FROM + 表名 + WHERE +name + IS NOT NULL; (找出表中名字不为空的属性)

统计个数 : count(*)       SELECT count(*) FROM students;   (学生的个数)
最大值: max(column)    SELECT max(`power`) FROM students;   (学力值中最大的值)
最小值: min(column)    SELECT min(`power`) FROM students;
求和:   sum(column)     SELECT sum(`power`) FROM students;
平均值:avg(column)      SELECT avg(`power`) FROM students;

分组聚合:
SELECT gender,count(*) FROM students GROUP BY gender; (按性别分组  各占的个数)
SELECT gender,max(`power`) FROM students GROUP BY gender;(按性别分组  男女中学历值最大的各是多少)
SELECT gender,max(`power`) FROM students GROUP BY gender HAVING max(`power`)>9000;(分组聚合之后 筛选最大值中大于9000的)

分页算法:
SELECT *FROM students LIMIT 3;     (取开头三个数据)
SELECT *FROM students LIMIT  3,3;    ( 跳过三个再取三个数据)
排序:
SELECT *FROM students ORDER BY number;   (按学号排名,默认升序,DESC降序)

通过外键保证三大关系:

一对多:让多的一段加上外键 外键一定要关联到唯一或主键上

多对多:构建一个中间表,并为中间表分别加上两个外键(分别指向两张表)

一对一:随便一端使用加上外键,再使用唯一键限制

修改表名:RENAME TABLE students TO stu ; (将students改为stu)

交换表名(利用修改表这中间变量 现有表students 和表tb):

RENAME TABLE students TO temp, tb TO students,temp TO tb;

修改库 当前没有这个库 会新建一个库 将当前库里的所有表移动到新建的表中,然后再删除当前库: RENAME TALBLE mytest.stus(当前库下的表) TO klass32.stus(新建库下表);

增加列和删除列:

ALTER TBLE students (修改表)

ADD COLUMN age int(11) DEFAULT 1; (添加一列年龄 属性 默认一岁) 默认加在表的最后

ALTER students (修改表)

ADD COLUMN age int(11) DEFAULT 1 AFTER; #FIRST 插到行首 指定插入一列到number之后

ALTER TABLE students

DROP COLUMN age; 删除列 age

添加主键:

ALTER TABLE tb_name(表名) ADD PRIMARY KEY + 列;

删除主键:

ALTER TABLE + 表名 +DROP PRIMARY KEY; #删除主键得先把id的定义AUTO_INCRMENT 修改 (ALTER TABLE + 表名 + MODIF id int(11) unsigned NOT NULL;)

在MySQL里面,唯一键其实被叫做有唯一键约束的索引

添加索引:ALTER TABLE tb_name ADD INDEX (CO); #列(co)

重命名:

ALTER TABLE students RENAME COLUMN old_name TO new_new;

修改列的定义(只修改列里的选项):

ALTER TABLE students MODIFY `number` int(11); 修改后的定义

改变(把重命名和修改列定义结合):

ALTER TABLE students CHANGE + 旧列名 + 新列名 + 要修改的定义

  1. web

    标题标签:h1 在一个页面上只出现一次 h2-h6自由分配
    段落标签:


    粗体标签: #加粗(物理加粗)
    不仅可以加粗,还利于SEO搜索
    换行:

    水平分割线:

    斜体标签:斜体 不仅可以斜体还利于SEO搜索
    标签可嵌套:
    eg:
    a标签:
    target属性 # _blank 在新窗口打开,_self 当前网页打开 (默认)

优先级: id选择器>类选择器class>标签选择器

行内样式>标签样式>外部样式

字体:

text-align:left;   #左对齐
text-align:right;   #向右对齐
text-align:center;   #居中对齐
text-indent:2em;    #首行缩进(两字符)

文本线:

text-decoration:underline;  #有下划线
text-decoration:none;  #无下划线
text-decoration:line-through;   #删除线

字距: letter-spacing:1em; 字体间距为一个字距

词距: word-spacing:20px; #词之间的距离(确定词要用空格隔开 比如 你 好帅哦)

行距: line-height;

背景:background-color:red;

背景图片: background-image:url(''../images/a.jpg"); # url 路径(默认平铺)

不平铺重复: background-repeat:no-reneat;

横向(竖向)平铺:background-repeat:repeat-x(y);

背景大小:background-size:200px;

背景定位: background-position:100px(宽)200px(高);

复合样式:background:red url("../images/b.jpg") on-repeat;

盒模型之边框:

复合样式: border:1px solid red;

边框颜色: border-color:red;

边框宽度: border-width:1px;

边框样式: border-style:solid(实线)/dotted(点线)/dashed(虚线)/double(双线);

左边框:border-left:1px solid red;

右边框: border-right:1px dotted green;

上边框: border-top:1px dashed blue;

下边框: border-bottom:1px double yellow;

内边框(文字与边框之间的距离):

上内边框:padding-top:20px;

下内边框: padding-bottom:20px;

左内边框:padding-left:20px;

右内边框: padding-right:20px;

外边框(内边框与外框之间的距离): #设置过大会跳出框

左外边框: margin-left:10px;

右外边框: margin-right:10px;

上外边框: margin-top:10px;

下外边框: margin-bottom:10px;

自适应(居中): margin-auto;

定位属性值:

默认值: position:static;

相对定位: position:relative; left:100px;

绝对定位: position:absolute;

固定定位: position:fixed;

小手指: cursor:pointer;

等待: cursor:wait;

帮助: cursor:help;

箭头: cursor:default;

16.1 JavaScript

JavaScript与Java没有关系,JavaScript的作用:

页面特效,前后交互,后台开发(node);严格区分大小写 ,每一行完整语句后加; 变量名不能使用关键字和保留字 代码要缩进,保持可读性

单行注释: //

多行注释: /* */

弹窗,调试代码: alert(“你好'');

控制台打印 ,调试代码: console。log(1);

JS代码写在script标签里面,从外部JS文件引入

<script src="index.js">这里不能写代码</script>
//如果script里面涉及到操作后面的元素,而又非得把script放在前面的话,需要加上:window.onload
	window.onload = function(){alert("我是里面的")};    //当整个页面加载完成之后,在执行这里的代码,一个页面中只能出现一次window.onload

获取元素:

JS获取独有的标签:

document.title

document.head

document.body

其他标签的获取,id前面必须document,其他的前面可以是某个元素(id.document),但不能是集合

通过ID获取元素

document.getElementById(id_name)

通过className获取元素(不支持IEB及以下)

document.getElementsByClassName("class_name")

通过标签获取元素

document.getElementsByTagName("标签名")

通过选择器的写法获取元素

document.querySelector("名")

document.querySelectorAll("名")

通过name获取元素

document.getElementByName()

document.title = "我要把标题改了"   //修改页面标题,修改别的标签的内容,得用innerHTML(会解析标签),innerText(不会解析标签)
document.body.innerHTML = "<h1>下午好</h1>"   //解析成标题标签  加粗
document.body.innerText = "<h1>goodman</h1>"   //不会解析,写什么
  1. 爬虫

cookie是存储在客户端的

session是基于cookie的,session是存储在服务器上的数据

HTTP 请求格式:

GET / HTTP/1.0\r\nHost: www.baidu.com\r\n\r\n

请求方法 空格 URL路径 空格 协议版本 \r\n头部字段:空格 域名值\r\n\r\n

urllib.request------>发起网络请求

User-Agent referer 来源

timeout 连接超时

pip install flask

man(ps) #查看参数 具体作用

ps -ef 查看进程

ps -ef|grep python #查看含有Python资源的进程

kill PID #杀死进程

virtualenv zeng 创建虚拟环境zeng,用默认Python环境创建

source zeng/bin/activate 激活虚拟环境 #无法在workon中查看

rmvirtualenv zeng 删除虚拟环境

------------恢复内容结束------------
第一节 基础

  1. 占位符
  • 语法
    str1 = 'i'
    str2 = 'love'
    str3 = 'you'
    '%s %s %s' % (str1,str2,str3)

  • 效果

    'i love you'

1.1 join

''.join(['1','2','3'])
' '.join(['1','2','3'])
'*'.join(['1','2','3'])
' '.join([str1,str2,str3])
  • 效果

    '123'
    '1 2 3'
    '123'
    'i love you'

  1. format
  • 语法

    '{:<10}'.format(123) #左对齐
    '123 '
    '%d' % 12.33 #取整
    '12'
    '{}'.format(1,2,3)
    '1'
    print('%r' % '123')
    '123'
    '{:^5}'.format(1)
    ' 1 '
    '{:0^5}'.format(1)
    '00100'
    '{:*^5}'.format(1)
    '1'

    '请输入>>{}'.format(1)
    '请输入>>1'
    a = '请输入>>{}'.format
    a(1)
    '请输入>>1'
    a(3)
    '请输入>>3'
    '{{hello {}}}'.format('python')
    '{hello python}'
    '{{好 {}}}'.format('啊')
    '{好 啊}'

    '{}{}{}'.format(str1,str2,str3)
    'iloveyou'
    '{}{}{}'.format(str1,str2,3)
    'ilove3'
    '{} {} {}'.format(str1,str2,3)
    'i love 3'
    '{2} {1} {0}'.format(str1,str2,3)
    '3 love i'
    '{0} {0} {0}'.format(str1,str2,3)
    'i i i'

    '%-6.2f'%10.3 #左对齐
    '10.30'
    '%10d'%12.4 #取整
    ' 12'
    '%10.5f'%12.4 #先精确后补位
    ' 12.40000'

  1. 虚拟机命令
  • 小火车 : sl
  • cmatrix : 代码雨 # sudo apt install cmatrix
  • tree:目录树 #tree / :根目录树 sudo apt install tree
  • Ctrl + c :退出
  • top : 任务管理器 #htop : 任务管理器(彩色;第一次需要安装 # sudo apt install htop
  • -进入Python 
    dir(__builtins__)   查看Python全部内置函数
    import keyword;  kyword.kwlist    查看关键字
    
  • a = 1
    type(a)   查看a的类型
    id(a)     查看内存地址
    help()    查看帮助文档
    

4.强制类型转换

str([1,2,3])         强制转换成字符串
tuple([1,2,3])         强制转换成元组
  1. 列表方法
  • dir () 查看方法

  • li = [1,2,3,4]
    

  • li.append(5) 效果: [1,2,3,4,5]
    li.extend([6]) [1,2,3,4,5,6]
    li.insert(0,'c') '0'索引位置,‘c’需要加的内容 ['c',1,2,3,4,5,6]

  • li.pop(0) 删除索引位置的值 [1,2,3,4,5,6]
    li.remove(6) 指定删除 [1,2,3,4,5]
    li.clear() 清空列表

  • li[0] = False 索引修改 [False,2,3,4,5]
    li.index(4) 查看索引 3
    li.count(5) 查看值出现的次数 1

  • li.reverse()    内容倒数
    li.sort()       自动排序
    
  1. 元组方法

    tu = (1,2,3,4)
    tu.count(4) 查看值出现的位置(索引)
    tu.index(4) 查看值出现的次数

7.字符串

  • s = ' a123456b '
    s.find('4')           3        查看索引    
    s.isdigit()           True    查看是否都是数字
    '123asdf'.isdigit( )  False   是否全是数字
    '123asdf'.isalpha( )  False   是否全是英文
     '123asdf'.endswith( '1') False       是否以某个值结束
    '123asdf'.startswith('1')  True     是否以某个值开始
    s.upper()                           全部变大写
    s.lower()                           全部变小写
    len(s)            10                查看元素个数
    s.capitalize()                      首字母大写
    s.lstrip()                          去掉左边的空格
    s.rstrip()                          去掉右边的空格
    s.strip()                           去掉前后空格
    
  1. 集合
  • se = {1,2,3,4}
    se1 = {2,3,4,5}
    se&se1   取两个集合的交集    {2,3,4}
    se|se1   合并两个集合
    
  1. 文件导入的大致过程

    模块就是一个py文件

    我们需要更好的管理代码的方式 一处写,多处使用

    import ... 直接导入

    import ...as... 导入后,为导入后的对象指定名称 例如:import random as jj

    from ..import..as.. 从..中导入某个对象,导入后,为导入后的对象指定名称 例如:from random import rand as gg

    open函数会负责打开一个文件并返回一个文件对象 f = open(r'myfile.txt')
    f这个就是表示myfile.txt这个文件对象。我们可以操作这个文件

    f.close :关闭当前文件

    with open('myfile.txt') as f
    print(f)
    #xx
    #dd

    • with能够帮助我们自动关闭文件

    with open('myfile.txt',mode = 'r') as f
    contents = f.read() #读取全部 f.readlines
    print('contents')

    'r‘模式打开一个不存在的文件会报错
    'w'模式或'a'模式打开一个不存在的文件就创建一个文件
    f.flush() 强制将数据输入文件(建议每次write完都flush)

10.正则

  • 其实就是一个字符串,这个字符串里面写了一些模式,一些特定的样子 能够用正则表示一些特定的模式的子串
  • 判断用户注册账号是否满足格式 抓取页面中的连接

10.1 元字符

  • 在正则中有特殊功能
  • 常用元字符有
  • .   通配
    ^   开头
    $   结尾
    {}  重复
    *   重复
    +   重复
    ?   重复、非贪婪
    |   选择
    []  选择
    

10.2 锚点元字符

  • 锁定行首: ^ 托字符 标识行首
  • 锁定行尾: $
  • 单词边界(不是元字符):\b
  • import re   #python内置模块,可操作正则语言
    res = re.findall(r'\ddog\d','you are dog withdoggie')     #\ddog\d   # 匹配完整单词
    

10.3 重复元字符

  • import re
    
    res = re.findall('a{3}c','abbbc')  a与c之间只能是三个字
    res = re.findall('a{3,}c','abbbc')  a与c之间只能是大于等于三个字
    res = re.findall('a{3,6}c','abbbc')    a与c 之间只能是三到六个字
    res = re.findall('a{,6}c','abbbc')  a与c 之间只能是小于等于六个字
    print(res)
    res = re.findall('ab?c','abc')    ? 如{0,1} 表示一个或没有   可能输出ac   abc
    res = re.findall('a+c','abc')     + 如{1,}表示一个或多个  
    res = re.findall('a*c','abc')     *  如{0,}表示任意多个
    

10.4 选择元字符

res = re.findall('ab|dc','abc')   | 输出要么是abc要么是adc
res = re.findall('a(b|d)c','adc')  提取b或则d  输出'b'或则'd'
res = re.findall('a[bed]c','abc')  []  方括号里面对的 只能代替一个输出  可能是 abc aec adc
res = re.findall('a[a-z]c','ahc')  取a-z中任意一个
res = re.findall('a[0-9]c','a6c')  取0-9中任意一个
res = re.findall('a[A-Z]c','aDz')  取A-Z中的任意一个大写
res = re.findall('a[^de]c','afc')  除了de外取任意一个

10.5 预定义字符类

\b  任意一数字字符     [0-9]
\D  任意一非数字字符   [^0-9]
\s  任意一空字符       [\t\n\x0B\f\r]
\S  任意一非空字符     [\t\n\x0B\f\r]
\w  任意字母数字字符   [a-zA-Z0-9]
\W  任意非字母数字字符   [^a-zA-Z0-9]
  • 分组:我们要从满足格式的文本中,获取某个部分的数据,那么就要用分组

11.MongoDB

大于 $gt

小于 $lt

等于 $eq

大于等于 $gte

小于等于 $lte

不等于 $ne

db.student.insert([
   {'name': ' a',  'age': 10},
   {'name': ' b',  'age': 15},
   {'name': ' c',  'age': 20},
   {'name': ' d',  'age': 25},
]);
#例如:
db.student.find({'age':{$gt:15}});
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e6"), "name" : " c", "age" : 20 }
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e7"), "name" : " d", "age" : 25 }
> db.student.find({'age':{$lt:15}});
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e4"), "name" : " a", "age" : 10 }
> db.student.find({'age':{$lte:15}});
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e4"), "name" : " a", "age" : 10 }
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e5"), "name" : " b", "age" : 15 }
> db.student.find({'age':{$gte:15}});
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e5"), "name" : " b", "age" : 15 }
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e6"), "name" : " c", "age" : 20 }
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e7"), "name" : " d", "age" : 25 }
> db.student.find({'age':{$ne:15}});
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e4"), "name" : " a", "age" : 10 }
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e6"), "name" : " c", "age" : 20 }
{ "_id" : ObjectId("5bddbc9520e4868cb550d0e7"), "name" : " d", "age" : 25 }

# 与         $and
# 或         $or
# 条件     $where
# 正则     $regex

db.student.insert([
   {'name': ' a',  'age': 10, 'gender':'F'},
   {'name': ' b',  'age': 15, 'gender':'M'},
   {'name': ' c',  'age': 20, 'gender':'M'},
   {'name': ' d',  'age': 25,'gender':'F'},
]);

12.线程

优点:消耗内存相对较少

缺点:轮着执行的,所以不能充分利用CPU性能

import threading
from threading import Lock  从threading 导入锁

lock.Lock()  
lock.acquire  #上锁 
lock.release  #释放锁

def fib(n):
    if n == 1 or n ==2:          #缩短执行时间
        return 1
    return fib(n-1)+fib(n-2)

13.进程

缺点:消耗内存较大

优点:可以充分利用CPU

进程,只用在占满CPU上,会开一个进程池(大小是你的CPU个数),再每个进程里在创建线程85%的网站。

如果只有进程个数大于CPU,对所有的CPU核心而言,都是抢占式的,对所有的进程,他们都在排队。

14.生成器

作用,就是能够用函数的写法写出可以迭代对象

一旦!我们的函数里面用了yield语法,就不是一个函数了,而是一个“生成器函数”,生成器函数的作用并不是执行逻辑,而是返回“生成器”。

yield和return类似,将数据作为返回值,返回到外面,不一样的地方是,他不会中止函数,而是暂停函数。可以让“函数”多次返回值。

一旦生成器执行到结尾,那么就会引发一个异常Stoplteration

生成器的应用:

如果我希望在函数里面返回多次数据,我肯定是希望得到了一个数据返回出来以后需,先去处理这个数据,然后再找这个数据要下一次的数据。对那些需要等待一段时间才能拿到数据的情况,尤为有用。因为可以先暂停当前的函数,也就不会阻塞了,因此可以更大程度提高并发;

15.Mysql

#进去MySQL:
	第一种:mySQL -uroot -pqwe123;
	第二种:mysql -uadmin -pRoot110qwe
#退出:exit

15.1 库、表级

显示所有库:SHOW DATABASES;

创建库: CREATE DATABASE +库名;

切换&使用这个库: USE +库名;

删除当前数据库: DROP DATABASE +库名;

   USE+库名   进入库之后

创建表:

CREATE TABLE students(
id int(11) unsigned NOT NULL  AUTO_INCREMENT,
name varchar(30) NOT NULL,  
`number` char(9) NOT NULL,  
gender bit(1) DEFAULT b'0',
phone char(11) NOT NULL,  
tzazzcount varchar(20)NOT NULL,  
qq varchar(12),
wechat varchar(30),
`power` smallint(6) NOT NULL,  
actrecv smallint(6) NOT NULL, 
UNIQUE KEY(id),    #唯一
UNIQUE KEY(`number`), 
UNIQUE KEY(phone), 
UNIQUE KEY(tzazzcount), 
UNIQUE KEY(qq), 
UNIQUE KEY(wechat),
PRIMARY KEY (id)  #唯一且能为空     表中止能有一个
 );

类型 含义
整数 int/smallint
字符串 char/varchar
位 bit

约束 含义
不能为空 NOT NULL
不能重复 UNIQUE KEY
非空且唯一 (主键) PRIMARY KEY
无符号(非负) unsigned
自增长 (只能用在主键或唯一键当中 ) AUTO_INCREMENT

显示所有表: SHOW TABLES

显示表创建的信息: SHOW CREATE TABLE + 表名;

删除表: DROP TABLE + 表名;

指定表及字段: INSERT INFO + 表名 VALUES();

INSERT INFO students VALUES(1,'tuple','20181001',b'0','13521344');

指定插入:

INSERT INTO students(name,number,phone) VALUES('刘金全','201807504','18212961845');

查表:

SELECT * FROM +表名 ;

指定查:

SELECT name,phone FROM students;

筛选表中部分记录:

SELECT * FROM students WHERE name='tom';

移除表中所有记录:

DELETE FROM students WHERE 1;

按条件来删除记录:

DELETE FROM students WHERE name='  ';

更新所有数据:

UPDATE students SET  gender=b'1'  WHERE name='xiaoli';

更新多个数据:

UPDATE students SET genter=b'1' ,name='xiaowang'

 WHERE name='xiaowang';

is_delete=0 

比较运算:

等于 =
不等于 !=
大于 >
大于等于 >=
小于 <
小于等于 <=

SELECT * FROM + 表名 + WHERE +name + IS NOT NULL; (找出表中名字不为空的属性)

统计个数 : count(*)       SELECT count(*) FROM students;   (学生的个数)
最大值: max(column)    SELECT max(`power`) FROM students;   (学力值中最大的值)
最小值: min(column)    SELECT min(`power`) FROM students;
求和:   sum(column)     SELECT sum(`power`) FROM students;
平均值:avg(column)      SELECT avg(`power`) FROM students;

分组聚合:
SELECT gender,count(*) FROM students GROUP BY gender; (按性别分组  各占的个数)
SELECT gender,max(`power`) FROM students GROUP BY gender;(按性别分组  男女中学历值最大的各是多少)
SELECT gender,max(`power`) FROM students GROUP BY gender HAVING max(`power`)>9000;(分组聚合之后 筛选最大值中大于9000的)

分页算法:
SELECT *FROM students LIMIT 3;     (取开头三个数据)
SELECT *FROM students LIMIT  3,3;    ( 跳过三个再取三个数据)
排序:
SELECT *FROM students ORDER BY number;   (按学号排名,默认升序,DESC降序)

通过外键保证三大关系:

一对多:让多的一段加上外键 外键一定要关联到唯一或主键上

多对多:构建一个中间表,并为中间表分别加上两个外键(分别指向两张表)

一对一:随便一端使用加上外键,再使用唯一键限制

修改表名:RENAME TABLE students TO stu ; (将students改为stu)

交换表名(利用修改表这中间变量 现有表students 和表tb):

RENAME TABLE students TO temp, tb TO students,temp TO tb;

修改库 当前没有这个库 会新建一个库 将当前库里的所有表移动到新建的表中,然后再删除当前库: RENAME TALBLE mytest.stus(当前库下的表) TO klass32.stus(新建库下表);

增加列和删除列:

ALTER TBLE students (修改表)

ADD COLUMN age int(11) DEFAULT 1; (添加一列年龄 属性 默认一岁) 默认加在表的最后

ALTER students (修改表)

ADD COLUMN age int(11) DEFAULT 1 AFTER; #FIRST 插到行首 指定插入一列到number之后

ALTER TABLE students

DROP COLUMN age; 删除列 age

添加主键:

ALTER TABLE tb_name(表名) ADD PRIMARY KEY + 列;

删除主键:

ALTER TABLE + 表名 +DROP PRIMARY KEY; #删除主键得先把id的定义AUTO_INCRMENT 修改 (ALTER TABLE + 表名 + MODIF id int(11) unsigned NOT NULL;)

在MySQL里面,唯一键其实被叫做有唯一键约束的索引

添加索引:ALTER TABLE tb_name ADD INDEX (CO); #列(co)

重命名:

ALTER TABLE students RENAME COLUMN old_name TO new_new;

修改列的定义(只修改列里的选项):

ALTER TABLE students MODIFY `number` int(11); 修改后的定义

改变(把重命名和修改列定义结合):

ALTER TABLE students CHANGE + 旧列名 + 新列名 + 要修改的定义

  1. web

    标题标签:h1 在一个页面上只出现一次 h2-h6自由分配
    段落标签:


    粗体标签: #加粗(物理加粗)
    不仅可以加粗,还利于SEO搜索
    换行:

    水平分割线:

    斜体标签:斜体 不仅可以斜体还利于SEO搜索
    标签可嵌套:
    eg:
    a标签:
    target属性 # _blank 在新窗口打开,_self 当前网页打开 (默认)

优先级: id选择器>类选择器class>标签选择器

行内样式>标签样式>外部样式

字体:

text-align:left;   #左对齐
text-align:right;   #向右对齐
text-align:center;   #居中对齐
text-indent:2em;    #首行缩进(两字符)

文本线:

text-decoration:underline;  #有下划线
text-decoration:none;  #无下划线
text-decoration:line-through;   #删除线

字距: letter-spacing:1em; 字体间距为一个字距

词距: word-spacing:20px; #词之间的距离(确定词要用空格隔开 比如 你 好帅哦)

行距: line-height;

背景:background-color:red;

背景图片: background-image:url(''../images/a.jpg"); # url 路径(默认平铺)

不平铺重复: background-repeat:no-reneat;

横向(竖向)平铺:background-repeat:repeat-x(y);

背景大小:background-size:200px;

背景定位: background-position:100px(宽)200px(高);

复合样式:background:red url("../images/b.jpg") on-repeat;

盒模型之边框:

复合样式: border:1px solid red;

边框颜色: border-color:red;

边框宽度: border-width:1px;

边框样式: border-style:solid(实线)/dotted(点线)/dashed(虚线)/double(双线);

左边框:border-left:1px solid red;

右边框: border-right:1px dotted green;

上边框: border-top:1px dashed blue;

下边框: border-bottom:1px double yellow;

内边框(文字与边框之间的距离):

上内边框:padding-top:20px;

下内边框: padding-bottom:20px;

左内边框:padding-left:20px;

右内边框: padding-right:20px;

外边框(内边框与外框之间的距离): #设置过大会跳出框

左外边框: margin-left:10px;

右外边框: margin-right:10px;

上外边框: margin-top:10px;

下外边框: margin-bottom:10px;

自适应(居中): margin-auto;

定位属性值:

默认值: position:static;

相对定位: position:relative; left:100px;

绝对定位: position:absolute;

固定定位: position:fixed;

小手指: cursor:pointer;

等待: cursor:wait;

帮助: cursor:help;

箭头: cursor:default;

16.1 JavaScript

JavaScript与Java没有关系,JavaScript的作用:

页面特效,前后交互,后台开发(node);严格区分大小写 ,每一行完整语句后加; 变量名不能使用关键字和保留字 代码要缩进,保持可读性

单行注释: //

多行注释: /* */

弹窗,调试代码: alert(“你好'');

控制台打印 ,调试代码: console。log(1);

JS代码写在script标签里面,从外部JS文件引入

<script src="index.js">这里不能写代码</script>
//如果script里面涉及到操作后面的元素,而又非得把script放在前面的话,需要加上:window.onload
	window.onload = function(){alert("我是里面的")};    //当整个页面加载完成之后,在执行这里的代码,一个页面中只能出现一次window.onload

获取元素:

JS获取独有的标签:

document.title

document.head

document.body

其他标签的获取,id前面必须document,其他的前面可以是某个元素(id.document),但不能是集合

通过ID获取元素

document.getElementById(id_name)

通过className获取元素(不支持IEB及以下)

document.getElementsByClassName("class_name")

通过标签获取元素

document.getElementsByTagName("标签名")

通过选择器的写法获取元素

document.querySelector("名")

document.querySelectorAll("名")

通过name获取元素

document.getElementByName()

document.title = "我要把标题改了"   //修改页面标题,修改别的标签的内容,得用innerHTML(会解析标签),innerText(不会解析标签)
document.body.innerHTML = "<h1>下午好</h1>"   //解析成标题标签  加粗
document.body.innerText = "<h1>goodman</h1>"   //不会解析,写什么
  1. 爬虫

cookie是存储在客户端的

session是基于cookie的,session是存储在服务器上的数据

HTTP 请求格式:

GET / HTTP/1.0\r\nHost: www.baidu.com\r\n\r\n

请求方法 空格 URL路径 空格 协议版本 \r\n头部字段:空格 域名值\r\n\r\n

urllib.request------>发起网络请求

User-Agent referer 来源

timeout 连接超时

pip install flask

man(ps) #查看参数 具体作用

ps -ef 查看进程

ps -ef|grep python #查看含有Python资源的进程

kill PID #杀死进程

virtualenv zeng 创建虚拟环境zeng,用默认Python环境创建

source zeng/bin/activate 激活虚拟环境 #无法在workon中查看

rmvirtualenv zeng 删除虚拟环境

posted @ 2020-01-02 21:49  Epiphany_Th  阅读(237)  评论(0)    收藏  举报