Python快速入门
一,python基础
1 ,python窗口命令
pip install 包名 -i 源地址
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/
2,python语法
2.1 注释
#单行注释
'''
这是一个多行注释
'''
2.2 变量
2.2.1 变量的定义
#变量名 = 变量值
weather = '雨'
2.2.2 变量的类型
-
数字:int,float(long,complex)
money = 5000 weight = 53.5
-
布尔(boolen):true/false
#流程控制语句或性别的变量 sex = true gender = false
-
字符串(string):
inf = '这是一个字符串' inf1 = "这也是一个字符串" #单引号中可以嵌套双引号,双引号中可以嵌套单引号,但是单引号中不能嵌套单引号,双引号中不能嵌套双引号。嵌套中的引号会被当成字符串的内容
-
列表(list):
name_list = ['周杰伦','科比']
-
元组(tuple):
age_tuple = (18,16,15,25)
-
字典(dict):
#scrapy框架使用 #变量名 = {key:value,...} person = {'name':'张三','age':18}
2.2.3 查看数据类型
type(变量名)
2.2.4 变量的命名规范
- 只能由字母,数字,下划线组成
- 不能由数字开头,严格区分大小写
- 不能使用关键子
建议使用驼峰命名法
2.3 类型转换
爬虫爬取出来的大部分都是字符串类型,需要借助类型转换将数据转换为想要的数据类型
2.3.1 类型转换函数
函数 | 说明 |
---|---|
int(x) | 将x转化为整型 |
float(x) | 将x转化为浮点型 |
str(x) | 将x转化为字符串 |
bool(x) | 将x转化为布尔型 |
2.3.2 转换为浮点型
2.3.3 转换为字符串
大部分应用场景:将整形转换为字符串,方便拼接
2.3.4 转换为布尔值
- 非0的整数和浮点数(包括正数和负数)转化为布尔类型的结果均为True
- 只要字符串,列表,元组,字典中有内容,那就返回True(空格也算内容)
2.4 运算符
2.4.1 算数运算符
- 基础:+,-,*,/
- 整除://
- 取余:%
- 指数:**
- 括号:()
- 注意:字符串的加法用于拼接
2.4.2 赋值运算符
- 变量赋值
a = 1
- 同时为多的变量赋值
b = c = 2
d,e,f = 3
2.4.3 复合赋值运算符
(性能更好)
2.4.4 比较运算符
2.4.5 逻辑运算符
-
逻辑运算符性能优化
当and前面结果为False,其后面的代码将不在执行
当or前面为True时,其后面的代码将不再执行
2.5 输入输出
2.5.1 输出
-
普通输出
print()
-
格式化输出
%s : 代表字符串
%d : 代表数值
print("...%s..%d..."%(str,num))
2.5.2 输入
变量 = input('提示')
- 示例:
name = input('请输入姓名:')
age = input('请输入年龄:')
print('我叫%s,我今年%d岁'%(name,int(age)))
2.6 流程控制
2.6.1 if关键字
- 基本语法
if 判断条件:
执行语句
#注意缩进,Tab或者四个空格
2.6.2 if-else关键字
- 基本语法
if 判断条件:
执行语句
else:
执行语句
2.6.3 elseif关键字
- 基本语法
if 判断条件:
执行语句
elif 判断条件:
执行语句
else:
执行语句
2.6.4 for关键字
- 基本语法
#爬虫中只用到for循环,在此只学习for循环
for 变量 in 要遍历的数据:
方法体
-
range()函数
-
range(num)遍历[0,num)
-
range(num_1,num_2) 遍历 [num_1,num_2)
-
range(num_1,num_2,num_3) 遍历 [num_1,num_2) 步长为num3
-
-
示例
############for循环的使用############ inf = "i'm learning python" for i in inf: print(i) ############range(num)的使用############ inf = "i'm learning python" for i in range(len(inf)): print(inf[i]) #len()返回字符串长度
2.7 数据类型高级
2.7.1 字符串高级
-
获取长度:len
len(str)
-
查找内容:find
#返回第一次出现的位置,使用方法类似与面向对象的编程 inf = '12345' print(inf.find('1')) #结果:0
-
判断:startswith,endswith
#判断字符串是否以某字符串开始和结尾 inf = '12345' print(inf.startswith('12')) #结果:True print(inf.endswith('12')) #结果:False
-
计算出现次数:count
inf = '1212345' print(inf.count('12')) #结果:2
-
替换内容:replace
inf = '1212345' print(inf.replace('1','0')) #前面的替换为后面的 #结果:0202345
-
切割字符串:split
#从特定字符切割字符串 inf = '1#2#3' print(inf.split('#')) #结果:['1', '2', '3'] #结果返回列表
-
修改大小写:upper,lower
inf = 'China' print(inf.upper()) print(inf.lower()) #注意其为无参数的方法,不要忘记写括号 #结果:CHINA china
-
空格处理:strip
#去除空格 inf = ' China ' print(inf) print(inf.strip())
-
字符串拼接:join
str_1.join(str_2) #将str_1插入到每一个str2中 #例: str_1 = ' ' print(str_1.join('hello')) #结果:h e l l o
2.7.2 列表高级
-
添加
-
append
向列表的末尾添加数据
age_list = [16,15,16,14,13] print(age_list) age_list.append(11) print(age_list) #结果: #[16, 15, 16, 14, 13] #[16, 15, 16, 14, 13, 11]
-
insert
#insert(index(插入的下标 ),object) age_list = [1,3,4,5] print(age_list) age_list.insert(1,2) print(age_list) #结果: #[1, 3, 4, 5] #[1, 2, 3, 4, 5]
-
extend
将两个列表合并
list_1 = [1,2,3,4,5] list_2 = [6,7,8,9,10] list_1.extend(list_2) print(list_1) #结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
注意:该方法不会返回值,即不能直接输出或使用该函数得到结果,而是需要和上面例子中一样,先使用方法后再使用。
-
-
修改
list_name[index(下标)] = 修改的值 #注意下标从0开始
-
查询
-
in
值 in 列表 #返回 bool 值
-
not in
值 in 列表 #返回 bool 值
-
-
删除
-
del:根据指定下标删除
del list_name[index]
-
pop:删除最后一个值
list_name.pop()
-
remove:根据元素的值进行删除
list_name.remove(object) #object:表示想要删除元素的值
-
2.7.3 元组高级
-
Pyhon的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。
-
元组的访问方式也是通过’[]'加下标来访问
-
定义只有一个元素的元组,结尾要加上’,’ 否则会出现数据类型错误
tuple_1 = (1,) print(tuple_1)
2.7.4 切片
切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。
切片的语法:[起始:结束:步长]也也可以简化使用[起始:结束]
注意:选取的区间从“起始"位开始,到”结束"位的前一位结束(不包含结束位本身),步长表示选职间隔。
#访问指定下标的值
inf[1]
#访问指定区间的值
inf[1,4] #左闭右开
#从指定到结束
inf[2:]
#从头到指定结束(左闭右开)
inf[:3]
#指定区间和步长
inf[1:10:2] #最后一位为步长,左闭右开,最后不超过(10-1)
2.7.5 字典高级
字典的定义:
dic_naem = {key:value,...}
-
查询
字典的访问:
dic_name[key] #key不存在会报错 #或 dic_name.get(key) #key不存在会返回None
例子:
dic_1 = {'name':'章北海','age':43} print(dic_1['name']) print(dic_1['age'])
-
修改
dic_name[key] = new_value
-
添加
dic_name[new_key] = new_value #如果键不存在就为添加,如果存在就为添加
-
删除
-
del
-
删除指定的某个元素
del dic_naem[key]
-
删除整个字典
del dic_naem
-
-
clear:清空字典
dic_name.clear()
-
-
遍历
-
遍历字典的key
dic_name.keys()
dic_1 = {'name':'章北海','age':43} for key in dic_1.keys(): print(key)
-
遍历字典的value
dic_name.values()
dic_1 = {'name':'章北海','age':43} for value in dic_1.values(): print(value)
-
遍历字典的key和value
dic_name.items()
dic_1 = {'name':'章北海','age':43} #注意要分开 for key,value in dic_1.items(): print(key,value)
-
遍历字典的项/元素
dic_1 = {'name':'章北海','age':43} #注意要分开 for item in dic_1.items(): print(item)
-
2.8 函数
2.8.1 定义函数
def 函数名(参数,....):
函数体
2.8.2 调用函数
函数名(参数,....)
#或
函数名(关键字_1 = value_1,....) #这种方法可以打乱参数的顺序
2.8.3 函数的返回值
def 函数名(参数,....):
函数体
return 返回值
2.8.4 局部变量和全局变量
-
内部变量:定义在函数的内部定义的变量
特点:其作用域范园是涵数內部,而函数的外部是不可以使用
-
全局变量:定义在函数外部的变量我们称之为全局变量
特点:可以在函数的外部使用,也可以在函数的内部使用
例:
#####定义#####
def max(a,b):
if a > b:
return a
else:
return b
#####调用#####
print(max(3,2))
2.9 文件
2.9.1 文件的打开和关闭
#####打开文件
f = open('file_name(要加后缀)',访问模式(要加引号))
#存在就打开,不存在就创建(不能创建文件夹)
#####关闭文件
f.close()
-
文件路径
-
绝对路径
-
相对路径
- filename:当前文件夹下的文件
- ./filename:当前文件夹下的文件
- …/filename:当前文件夹上一级目录寻找filename文件
- demo/filename:当前文件夹下的demo目录寻找filename文件
-
-
文件的访问模式
2.9.2 文件的读写
-
写数据(write)
f = open('test_file.txt','w') f.write('hello,python!\n' * 999) #如果文件存在,就会先清空,后写,将模式改为a为追加 f.close()
-
读数据(read / readline)
f = open('test_file.txt','r') inf = f.read() #默认情况下,r一字节一字节读,速度比较慢,readline较快 inf = f.readline() #readline只能读一行,使用readelines能够读取多行(返回列表) inf = f.readlines() print(inf) f.close()
2.9.2 文件的序列化和反序列化
通过文件操作,我们可以将字符串写入到一个本地文件。但是,如果是一个对象(例如列表、字典、元组等),就无
法直接写入到一个文件里,需要对这个对象进行序列化,然后才能写入到文件里。
设计一套协议,按照某种规则,把内存中的数据转换为字节序列,保存到文件,这就是序列化,反之,从文件的字
节序列恢复到内存中,就是反序列化。
Python中提供了JSON这个模块用来实现数据的序列化和反序列化。(必须先导入json:import json)
序列化:对象 -> 字节序列
反序列化:字节序列 -> 对象
-
序列化
-
dumps
json.dumps(object) #####例子##### import json a = [1,2,3,4,5] f = open('txt.txt','w') f.write(json.dumps(a))
-
dump
对象转换为字符半的同时,指定一个文件的对象然后把转换后的字符串符存到这个文件里
json.dump(object,file_name) #####例子##### import json a = [0,1,2,3,4,5] f = open('txt.txt','w') json.dump(a,f)
-
-
反序列化
-
loads
object = json.loads(str) #####例子##### import json f = open('txt.txt','r') inf = f.read() #print(inf) #print(type(inf)) inf = json.loads(inf) print(inf) print(type(inf))
-
load
object = json.load(file_name) #####例子##### import json f = open('txt.txt','r') inf = json.load(f) print(inf) print(type(inf)) f.close()
-
dump
对象转换为字符半的同时,指定一个文件的对象然后把转换后的字符串符存到这个文件里
json.dump(object,file_name) #####例子##### import json a = [0,1,2,3,4,5] f = open('txt.txt','w') json.dump(a,f)
-
-
反序列化
-
loads
object = json.loads(str) #####例子##### import json f = open('txt.txt','r') inf = f.read() #print(inf) #print(type(inf)) inf = json.loads(inf) print(inf) print(type(inf))
-
load
object = json.load(file_name) #####例子##### import json f = open('txt.txt','r') inf = json.load(f) print(inf) print(type(inf)) f.close()
-
2.10 异常
异常格式
try:
可能出现的异常代码
except 异常类型:
提示语句