day1:
变量:把程序运行过程中产生的中间值。暂时存储起来。方便后面的程序调用.
变量命名规范:
常量:所有字母大写
注释:
数据类型:
1. int 整数
2. str 字符串. 不会用字符串保存大量的数据 ,字符串由',"", ''', """组成
3. bool 布尔值. True, False 所有的空都是False。 非空都是True
4. list 列表(重点) 存放大量的数据
5. dict 字典 key: value 查找会比较快
6. set 集合 无序 不能重复
7. bytes 一堆字节。 我们程序处理的最小单位
8. tuple 元组 不可变的列表
输入:input()
循环:if elif else
day2:
循环:while break终止 continue停止当前本次循环。 继续执行下一次循环
格式化输出:%s
运算符:优先级: ()-> not -> and -> or
1 and 2 取2
1 or 2 取 1
0 and 2
0 and 1
字符串编码
1. ASCII 8bit 1byte
2. GBK 16bit 2byte
3. Unicode 32bit 4byte
4. UTF-8 可变长度的unicode
英文: 8bit 1byte
欧洲文字; 16bit 2byte
中文 :24bit 3byte
判断:in / not in
day3:
1.索引
字符串中每个字符的位置顺序
索引从0开始. 程序员数数从0开始
s[索引] 获取到字符串s中的索引位置的数据
s[:] 从头到尾
s[-1] 反向索引
s[3:1:-1]) 从右往左切片
s[start: end] 从start切到end。 但是不包含end. 顾头不顾尾
s[start: end: step] step步长。 每隔xx个取1个。 默认是1 如果step是-1 从右往左取值
2.切片
s[start: end: step]
从start开始到end结束。 但是取不到end. 每step个取一个
3.字符串操作
1.upper() 全部转化成大写字母
2.strip() 去掉左右两段的空白(空格,
, )
3.replace(old, new) 字符串替换
4.split() 切割. 得到的结果是一个列表.
5.startswith() 判断是否以xxx开头
6.find() 查找。如果找到了。 返回索引。如果找不到返回-1
7.len() 内置函数,求字符串长度
8.center()
9.count()计数
10.find()查找 没有返回-1
11.index()索引 没有报错
12.isalpha() 检测字符串是否只由字母组成
13.isdigit() 是否只有阿拉伯数字
14.isnumeric() 检测字符串是否只由数字组成。这种方法是只针对unicode对象
15.isalnum() 检测字符串是否由字母和数字组成。
4. 迭代
for 变量 in 可迭代对象:
循环体(break,continue)
要求掌握
# 把任意字符串中的每一个字符打印出来
# s = "胡辣汤好喝,疙瘩汤也好喝,所以再来一碗"
# index = 0
# while index < len(s): # 0 1 2...19
# print(s[index])
# index += 1
day4:
1、List:增删改查
1. 新增:
append(元素) 添加到末尾
insert(index, 元素) 把元素插入到对应索引的位置
extend(可迭代对象) 迭代添加
2.删除:
pop() 弹出最后一个 pop(1)弹出指定元素
pop(index) 弹出指定位置的元素
remove() 移除xxx元素
clear()清空列表
del[6:2:1] 索引和切片
3. 改: 根据索引修改.
4. 查询: for循环
for el in lst:
for i in range(len(lst)):
2. 列表的常用功能
1.count()
2.index()
3.sort() 排序
4.sort(reverse = True)倒序
5.reverse() 翻过来
3. 列表的嵌套
降维操作。 一层一层的找
4. 元组。相关操作
tuple: 只读列表。由() 组成。特点:不可变
如果只有一个元素。 末尾加逗号("sdd",)
不可变: 元素内部第一层元素的内存地址
day5:
字典中的key是不能重复的。 存储是依靠着key来计算的
字典是使用hash算法计算key的哈希值. 使用哈希值来存储数据
哈希算法得到的是一个唯一的数字(可能是正数, 可能是负数, 很大或者很小)
哈希算法是无序的
字典中的key必须是可哈希的, 不可变的就是可哈希的
不可变: 字符串, 元组, int, bool
可变的: list, dict, set
【增删改查】
1. 增加
dic[key] = value
setdefault(key, value)
给dict中的Value添加新值不覆盖>>>>>>>>>>>>>>?
2.删除
pop(key)
popitem() 随机删除
del dic[key]
clear()
3.修改
dic[key] = value
dic1.update(dict2)
dict修改key>>>>>>>>>>>>>>>>>>>>>>>>>>>
a = {"yuntian":"zero", "Alex":"Li"}
a["Yuntian"] = a.pop("yuntian")
print(a)
# a.update(Yuntian = a.pop("yuntian"))
4. 查询
dic[key] 可能会报错
dic.get(key)
dic.setdefault()
dic.values()显示所有values的值,像列表但不是列表
dic.items()所有键对值
字典的迭代:
for k, v in dic.items():
print(k, v)
for k in dic:
dic[k]
# lst = [11,22,33,44,55,66,77,88,99]
# dic = {}
# for el in lst:
# if el > 66:
# dic.setdefault("key1", []).append(el)
# else:
# dic.setdefault("key2", []).append(el)
# print(dic)
day6:
is 判断内存地址是否一致
== 判断内容是否一致
python2中用的是ascii
python3用的是unicode
字符串如果传输:
encode(编码) 结果是bytes类型
接受到bytes之后。 需要解码
decode(编码). 结果是字符串
s.encode("utf-8")
# 缓存: 为什么有缓存。 缓存有什么问题,数据安全.google(自己盖发电厂。)
# 数据是保存在硬盘上。 硬盘的读写速度是很慢的. 72mb/s
# 把数据存储在内存中进行缓存。 1g/s
# 加大数据吞吐量
# 分布式. 异地部署
day7:
1. join: 把列表中的数据进行拼接。 拼接成字符串,如果有数字类型,可以用str强制转换成字符
"_".join(lst)
2. 关于删除:
列表和字典在循环的时候都不能删除。
把要删除的内容保存在新列表中。 循环新列表。 删除老列表(字典)
# 把要删除的内容记录在一个新列表中
# new_lst = []
# for el in lst:
# new_lst.append(el)
# # 循环这个新列表. 删除原来的列表
# for el in new_lst: # 不会导致循环的列表的元素移动问题
# lst.remove(el) # 注意, 删除的是老列表
# lst = ["王大锤", "王有才", "张小白", "刘大哥"]
# # 删除掉姓王的
# new_lst = [] # 装要删除的内容
# for el in lst:
# if el.startswith("王"): # 判断字符串是否以xxx开头
# new_lst.append(el)
# # 执行删除
# for el in new_lst:
# lst.remove(el)
3. fromkeys
dict.fromkeys(iter, value)
把可迭代对象进行迭代。 和后面的value组合成键值对 返回新字典
坑1: 返回新字典。不会改变原来的字典 [看代码]
dic = {}
dic.fromkeys(xxx, xxx)
print(dic) # {}
坑2: 【看代码】
d = fromkeys(xxx.[])
字典中的所有的value都是同一个列表
4. set集合
特点:无序不重复。 内部元素必须可哈希
1. add() 添加
让列表变成元祖set(lst)
5. 深浅拷贝(画图理解)
1. = 赋值操作没有创建新的对象。 此时 两个变量指向的是同一个内存地址
2. copy() [:] 浅拷贝。 拷贝第一层内容
3. 深拷贝
import copy
copy.deepcopy() 深度拷贝。 把对象内部的所有内容都拷贝一份
作用: 快速创建对象
day8:
文件操作【重点来了】:
1. 文件操作 open() 文件句柄
open()打开一个文件, 获取的是文件句柄
read()
readline() 读取第一行
readlines() 一次性全都读取出来, 返回的是列表
write()
for line in f: 遍历文件中的内容
路径的问题:
1. 绝对路径
从磁盘根目录寻找 windows下用的就是c,d,e,f, linux: userinxxxx
2. 相对路径
从当前程序运行的文件夹内寻找 ../ 表示上一层文件夹
n 转义字符。 有固定的含义的。 推荐用r
open(r"E:哈哈
护士模特少妇.txt", mode="r", encoding="utf-8")
2. 文件操作的相关模式Mode
r: 只读
w: 只写
a: 追加
r+:
w+:
a+:
非文本文件
rb
wb
ab
r+b
w+b
a+b
3. 相关操作
1. seek()移动光标(重点)
seek(0) 开头
seek(0,2) 移动到末尾
2. tell() 获取光标所在的位置
3. truncate(3) 截断文件从头截取到3
# seek(参数1, 参数2)
# 参数1表示的是偏移量,移动多少个单位
# 参数2表示从什么位置进行偏移
# 0: 开头
# 1: 当前位置
# 2: 末尾
# 把光标移动到文件的开头: seek(0)
# 把光标移动到末尾: seek(0, 2)
4. 文件修改
with open(xxx) as 句柄,
open(xxxxx)as xxx
不用手动关闭文件句柄
文件修改的步骤
1. 从源文件中读取数据。
2. 写入到副本文件中
3. 删除源文件
4. 把副本重命名成源文件
import os
os.remove()
os.rename()
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<必须要掌握>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
# 文件句柄是一个可迭代对象
# f = open("胡辣汤", mode="r", encoding="utf-8")
# for line in f: # 读取文件中的内容。 一行一行的读取。 每次读取的内容交给前面的变量
# print(line.strip())
1、文本文件的复制(04)>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
f1 = open(r"c:日记本.txt", mode="r", encoding="utf-8")
f2 = open(r"d:日记本.txt", mode="w", encoding="utf-8")
for line in f1: # 从f1中读取数据
f2.write(line) # 写入到f2中
f1.close()
f2.close()
2、文本文件修改>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
import os # 导入os模块
import time # 时间模块
with open("唐诗", mode="r", encoding="utf-8") as f1,
open("唐诗_副本", mode="w", encoding="utf-8") as f2:
for line in f1:
line = line.replace("善良", "sb")
f2.write(line)
time.sleep(5)
os.remove("唐诗") # 删除源文件
time.sleep(5)
os.rename("唐诗_副本", "唐诗") # 把副本改名成源文件
3、文本文件里列表变成字典>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'''
编号,名称,价格,数量,仓库,phone
1,榴莲,500,60000,1号仓库,10010
2,苹果,700,70000,2号仓库,10086
1,榴莲,500,60000,1号仓库,155
2,苹果,700,70000,2号仓库,166
'''
'''变成
[{'编号': '1', '名称': '榴莲', '价格': '500', '数量': '60000', '仓库': '1号仓库', 'phone': '10010'},
{'编号': '2', '名称': '苹果', '价格': '700', '数量': '70000', '仓库': '2号仓库', 'phone': '10086'},
{'编号': '1', '名称': '榴莲', '价格': '500', '数量': '60000', '仓库': '1号仓库', 'phone': '155'},
{'编号': '2', '名称': '苹果', '价格': '700', '数量': '70000', '仓库': '2号仓库', 'phone': '166'}]
'''
f = open("水果.data", mode="r", encoding="utf-8")
titles = f.readline().strip() # 读取第一行 id,name,price,num
t_list = titles.split(",") # 【id,name,price,num】
lst = []
for line in f: # "1,苹果,500,60000" {id:1,name:liulian, num:xx, price:xxx}
dic = {}
ll = line.strip().split(",")
for i in range(len(t_list)):
dic[t_list[i]] = ll[i]
lst.append(dic)
f.close()
print(lst)