1 数据类型
1.1 基本定义
- Number
int float
python3中没有long/double
- Boolean
List
a = [16, 17, 18]
Tuple
a = (16, 17, 18)
Dict
经常在scrapy框架中使用
a = {'key1' : 'value1', 'key2' : 'value2'}
1.2 查看变量数据类型
type(a)
1.3 数据类型转换
int(a) # 包含数字以外的字符时会转换失败
float(a)
str(a)
bool(a)
2 运算符
a = 9.0
b = 2.0
c = a // b # c = 4 取商的整数部分
字符串的乘法是重复字符串
# python赋值运算符的特殊性-多个变量赋值
a, b, c = 1, 2, 3
# 逻辑运算符
and or not
# 逻辑运算符的性能优化
# and: 如果前面有条件不为真,那么后面的条件不再进行判断
if (a>10) and (b>10) and (c>10)
do
# or: 只要前面有一个条件为真,就不再判断后面的条件
if (a>10) or (b>10) or (c>10)
do
3 输入输出
# 格式化输出
a = '5.12'
print('this is {}, and that is {}'.format(a, a))
# 接收输入
# 其中,默认输入为字符串类型,使用时按需转换数据类型
a = input('enter sth')
4 流程控制语句
# for循环
# TEMPLATE
# for i in a:
# do sth
# a可以是以下几种:
1. a是字符串: 遍历的是字符
2. a是range(5): 从0到4遍历
3. a是range(1,6): 左闭右开, 从1遍历到5
4. a是range(1,10,3): 遍历1,4,7
5. a是一个列表: 遍历list中的元素或者元素的下标
5 数据类型高级用法
5.1 字符串
功能 | 关键字 | 解释 |
---|---|---|
获取长度 | len | 获取字符串的长度 |
查找内容 | find | 查找指定内容是否在字符串中存在,如果存在,返回指定内容第一次出现的索引值;否则,返回-1 |
判断 | startswith、endswith | 判断字符串是否以'XXX'开头/结尾 |
计算出现次数 | count | 返回str在在字符串中出现的次数 |
替换 | replace | 替换字符串中指定的内容 |
切割 | split | 以指定参数切割字符串,返回列表,列表元素为字符串 |
修改大小写 | upper/lower | 修改字符串中的大小写 |
去空格 | strip | 去掉字符串中的空格 |
字符串拼接 | join | 一个按字符的字符串拼接 |
5.2 列表
列表的增删改查
添加元素
# append: 追加, 在列表的最后添加一个对象/元素
# insert: 插入, index的值就是想要插入的数据的下标
# extend: 继承, 将另一个列表中元素逐一添加到列表中
查找元素
# in: 判断元素是否在列表中, 如果在,返回true
# not in: 与in相反
修改元素
# 可以通过元素的下标直接修改元素
删除元素
# del: 根据下标删除列表中的元素
# pop: 删除列表中的最后一个元素
# remove: 删除指定的值删除元素
5.3 元组
python的元组和列表类似,不同之处在于元组的元素不能修改,元组使用小括号,列表使用方括号
定义只有一个元素的元组,需要在唯一的元素后写一个逗号
5.4 切片
切片是指对操作的对象截取一部分的操作,字符串、列表、元组都支持切片操作
# 语法: a[start, end] 左闭右开区间
a[0:4] # 左闭右开区间
a[1:] # 从起始值开始,一直到末尾
a[:4] # 从头开始,一直到第二个参数索引之前的元素
a[0:6:2] # 步长为2, 分别输出以下索引的元素: 0,2,4
5.5 字典
查询元素
a = {'key1':'value1', 'key2':'value2'}
# 使用[]的方式获取对应key的value
a['key1']
# 使用get方法
a.get('key1')
# 对比: 在于访问不存在的key, 第一种方法会报错, 第二种方法会返回None
修改元素
# 只能用[]的方式修改字典中的元素
a['key1'] = 'value3'
添加元素
# 直接[]出不存在的key即可
a['key3'] = 'value3'
删除元素
# del
# 1.删除字典中指定元素
del a['key1']
# 2.删除整个字典
del a
# clear
# 3.清空字典, 但是保留字典对象
a.clear()
遍历字典
# 1.遍历字典的key
for key in a.keys():
do sth
# 2.遍历字典的value
for key in a.values():
do sth
# 3.遍历字典的key和value
for key, value in a.items():
do sth
# 4.遍历字典的项/元素
for item in a.items(): # items()返回的是元组
do sth
6 文件
6.1 文件的打开与关闭
打开文件过后一定要记得关闭文件,否则耗内存
# 创建/打开文件
fp = open(文件路径, 打开模式) # open函数没法创建文件夹
# 关闭文件
fp.close()
文件打开模式:
访问模式 | 说明 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。如果文件不存在,则报错。这是默认模式。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
6.2 文件的读写
# 写文件
fp.write('txt' * 5)
# 读文件
# 默认情况下,read是一字节一字节读, 效率比较低
content = fp.read()
# readline是一行一行读 但是只能读取一行
content = fp.readline()
# readlines可以按照行来读取 但是会将所有数据都读到一个list中 list中的元素一行一行的数据
content = fp.readlines()
6.3 文件的序列化与反序列化
通过文件操作,我们可以将字符串写入到一个本地文件。但是,如果是一个对象(例如列表、字典、元组等),就无法直接写入到一个文件里,需要对这个对象进行序列化,然后才能写入到文件里。
设计一套协议,按照某种规则,把内存中的数据转换为字节序列,保存到文件,这就是序列化,反之,从文件的字节序列恢复到内存中,就是反序列化。
Python中提供了JSON这个模块用来实现数据的序列化和反序列化。
- JSON(JavaScriptObjectNotation, JS对象简谱)是一种轻量级的数据交换标准。JSON的本质是字符串。
a_list = ['a1', 'a2']
# 导入json模块到文件中
import json
# 序列化
# 将python对象变成json字符串
a = json.dumps(a_list)
a.write(fp) # a = "['a1', 'a2']"
# 将python对象变成json字符串并保存到文件中
json.dump(a_list, fp)
# 反序列化
# 将json字符串变成python对象
content = fp.read()
result = json.loads(content)
# 不用读文件 将json字符串变成python对象
result = json.load(fp)
7 异常
程序在运行过程中,由于我们的编码不规范,或者其他原因一些客观原因,导致我们的程序无法继续运行,此时,程序就会出现异常。如果我们不对异常进行处理,程序可能会由于异常直接中断掉。为了保证程序的健壮性,我们在程序设计里提出了异常处理这个概念。
# 异常的格式
# try:
# 可能出现异常的代码
# except 异常的类型:
# 友好的提示
try:
f = open('test.txt', 'r')
print(f.read())
except FileNotFoundError:
print('没找到文件')