周末班二期7.8号早上-字符编码、集合、文件处理、函数基本知识

周末班二期7.8号
周末班二期7.8号 1
1. 上节课复习 6
1.1. 数据类型分类 6
1.1.1. 访问方式分类 6
1.1.1.1. 通过变量名直接访问 6
1.1.1.2. 通过索引访问(有序/序列) 6
1.1.1.3. 通过key访问 6
1.1.2. 存值的个数分类 6
1.1.2.1. 存单个值 6
1.1.2.2. 存多个值 6
1.1.3. 可变不可变分类 6
1.1.3.1. 可变 6
1.1.3.2. 不可变 7
1.2. 字符编码 7
1.2.1. 内存中统一使用unicode编码的特点 7
1.2.2. 编码保证不乱码的关键 7
1.2.3. python2和python3编码格式 7
1.2.3.1. python2编码格式 7
1.2.3.2. python3编码格式 7
2. 集合 7
2.1. 引言 7
2.2. 类型 8
2.2.1. 作用 8
2.2.1.1. 去重 8
2.2.1.1.1. 去重的两个局限性 8
2.2.1.1.2. 消灭去重的两个局限性 8
2.2.1.2. 关系运算 9
2.2.1.2.1. 交集 9
2.2.1.2.2. 差集 10
2.2.1.2.3. 并集 10
2.2.1.2.4. 对称差集 10
2.2.1.2.5. 存在包含关系时 10
2.2.1.2.5.1. 父集 10
2.2.1.2.5.2. 子集 11
2.2.1.3. set,add() 11
2.2.1.4. set.difference_update(set1) 11
2.2.1.5. set.isdisjoint(set1) 11
2.2.1.6. set.discard(元素) 11
2.2.1.7. set.remove(元素) 11
2.2.1.8. set.pop(元素) 12
2.2.1.9. set.update(set1) 12
2.2.1.10. len(set) 12
2.2.1.11. 元素 in/not in set() 12
2.2.2. 定义 12
2.2.2.1. 定义方式 12
2.2.2.2. 注意点 12
3. 文件处理 13
3.1. 什么是文件 13
3.2. 为什么要有文件 13
3.3. 如何用文件 13
3.3.1. 控制操作系统打开文件的两种方式 13
3.3.1.1. f = open(r'文件路径‘, mode='r',encoding='utf8') 13
3.3.1.1.1. r'文件路径'中r的解释 13
3.3.1.1.2. 文件open用encoding的原因 13
3.3.1.1.3. f.read() 14
3.3.1.1.4. f.close() 14
3.3.1.1.4.1. f.close()注意事项 14
3.3.1.1.5. open打开文件总结 14
3.3.1.2. with open(r'文件路径‘, mode='r',encoding='utf8')as f 14
3.3.1.2.1. 打开多个文件 14
3.3.1.2.2. \r\n了解知识点 14
3.3.2. 如何打开文件 15
3.3.2.1. 文件打开的三种模式(纯净) 15
3.3.2.1.1. r模式(默认) 15
3.3.2.1.1.1. f.read() 15
3.3.2.1.1.2. f.readline() 15
3.3.2.1.1.3. f.readlines() 15
3.3.2.1.2. w模式 15
3.3.2.1.2.1. f.write() 15
3.3.2.1.2.2. f.wirtelines() 16
3.3.2.1.3. a模式 16
3.3.2.1.3.1. f.write() 16
3.3.2.1.3.2. f.writelines() 16
3.3.2.2. 控制文件内容的两种方式 16
3.3.2.2.1. 注意事项 16
3.3.2.2.2. t文本模式(默认) 16
3.3.2.2.2.1. 注意事项 17
3.3.2.2.3. b二进制模式 17
3.3.2.2.3.1. 文件通用读取 17
3.3.2.2.3.2. 文件通用写入 17
3.3.2.2.3.3. 注意事项 17
3.3.2.3. 文件是否可读写判断 17
3.3.2.3.1. f.readable(f) 17
3.3.2.3.2. f.writeable(f) 18
3.3.2.4. 遍历文件的方式 18
3.3.2.5. 文件打开的另三种模式(了解) 18
3.4. 补充知识点sys.argv 18
3.5. 拷贝文件 18
3.6. 文件内指针操作 18
3.6.1. f.seek(n, 0/1/2) 18
3.6.2. f.read(n) 19
3.6.2.1. n的注意事项 19
3.6.3. f.tell() 19
3.6.4. f.truncate(n) 19
3.7. 修改文件 20
3.7.1. 文本编辑器修改文件的原理 20
3.7.2. 修改文件方式 20
3.7.2.1. 全部读取后写入 20
3.7.2.2. 一行一行读一行一行写 20
4. 函数 21
4.1. 什么是函数 21
4.1.1. 内置函数 21
4.1.2. 自定义函数 21
4.2. 为什么要用函数 21
4.3. 如何用函数 21
4.3.1. 定义函数 21
4.3.1.1. 语法 21
4.3.1.2. 无参函数 22
4.3.1.3. 有参函数 22
4.3.1.4. 空函数 22
4.3.1.5. 定义函数发生的事情 22
4.3.2. 调用函数 22
4.3.2.1. 表达式形式 22
4.3.2.2. 当作参数传给其他函数 23
4.3.2.3. 函数返回值 23
4.3.2.3.1. 什么是函数的返回值 23
4.3.2.3.2. 什么时候用函数的返回值 23
4.3.2.3.3. 如何用返回值 23




1.上节课复习
1.1.数据类型分类
1.1.1.访问方式分类
1.1.1.1.通过变量名直接访问


int,float
1.1.1.2.通过索引访问(有序/序列)


str,list,tuple
1.1.1.3.通过key访问


dict
1.1.2.存值的个数分类
1.1.2.1.存单个值


int,float,str
1.1.2.2.存多个值


list,dict,tuple,set
1.1.3.可变不可变分类
1.1.3.1.可变


list,dict,set


1.1.3.2.不可变


int,float,str,tuple
1.2.字符编码
1.2.1.内存中统一使用unicode编码的特点


1、兼容万国字符
2、与其他国家的编码都有对应关系
1.2.2.编码保证不乱码的关键


1、采用的字符编码表能够兼容你要存放的字符
2、字符用什么编码标准存放的,就应该用什么编码标准去解码
1.2.3.python2和python3编码格式
1.2.3.1.python2编码格式


ASCII


str类型:unicode.encode(文件头指定的编码)之后的结果
x=u'你'——直接用unicode编码
1.2.3.2.python3编码格式


utf8


str类型:unicode编码
2.集合
2.1.引言


pythoners = [1,2,3,4,]
linuxers = [5,6,7,1,2,3,8,]
如果我们想取出同时报名pthon和linux的同学,得用下面这个方法:


l = []
for item in pythoners:
if item in linuxers:
l.append(item)
print(l)
2.2.类型
2.2.1.作用
2.2.1.1.去重


s = set('hello') # 把字符串内的字符一个个取出放进集合中
print(s) # {’h','e','o','l'} # 无序且去重'l'
2.2.1.1.1.去重的两个局限性


1、不能保证原来的顺序
l = [1,1,1,1,'egon','alex','egon'}
s = set(l)
print(s) # {'egon', 1, 'alex'}
l = list(s)
print(l) # ['egon', 1, 'alex']


2、不能针对可变类型去重
l = [1,1,1,1,'egon','alex','egon',{'a':1}
s = set(l)
print(s) # 报错
2.2.1.1.2.消灭去重的两个局限性


info = [
{'name':'egon', 'age':18},
{'name':'alex', 'age':73},
{'name':'egon', 'age':18},
{'name':'lxx', 'age':19},
]


l = []
for dic in info:
if dic not in l:
l.append(dic)
# l = [
{'name':'egon', 'age':18},
{'name':'alex', 'age':73},
{'name':'lxx', 'age':19},
]
2.2.1.2.关系运算




2.2.1.2.1.交集


pythoners = {1,2,3,4,}
linuxers = {5,6,7,1,2,3,8,}


求既报名python又报名linux的同学
print(pythoners & linuxers)
print(pythoners.intersection(linuexrs))
2.2.1.2.2.差集


pythoners = {1,2,3,4,}
linuxers = {5,6,7,1,2,3,8,}


求报名python没报名linux的同学
print(pythoners - linuxers)
print(pythoners.difference(linuexrs))


求报名linux没报名python的同学
print(linuxers - pythoners)
print(linuxers.difference(pythoners))
2.2.1.2.3.并集


pythoners = {1,2,3,4,}
linuxers = {5,6,7,1,2,3,8,}


求所有报名的同学
print(pythoners | linuxers)
print(pythoners.union(linuxers))
2.2.1.2.4.对称差集


pythoners = {1,2,3,4,}
linuxers = {5,6,7,1,2,3,8,}


求没有同时报名两名课程的同学
print(pythoners ^ linuxers)
print(pythoners.symmetric_difference(linuxers))
2.2.1.2.5.存在包含关系时
2.2.1.2.5.1.父集


s = {1,2,}
s1 = {1,2,3,}


print(s1 >/>= s) # True


s1是s的父集
print(s1.issuperset(s))
2.2.1.2.5.2.子集


s = {1,2,}
s1 = {1,2,3,}


print(s </<= s1) # True


s1是s的子集
print(s1.issubset(s))
2.2.1.3.set,add()


加入一个值,但只能加入不可变的数据类型
2.2.1.4.set.difference_update(set1)


s1 = {1,2,3,4,5}
s2 = {3,4}
s1.difference_update(s2) # s1 = s1.difference(s2)
print(s1) # {1,2,5}
2.2.1.5.set.isdisjoint(set1)


是否不存在set集合内
2.2.1.6.set.discard(元素)


删除一个元素,没有该值不会报错
2.2.1.7.set.remove(元素)


删除一个元素,没有该值会报错
2.2.1.8.set.pop(元素)


随机删除一个元素,没有该值会报错
2.2.1.9.set.update(set1)


set集合加入一个set1集合
2.2.1.10.len(set)


计算长度
2.2.1.11.元素 in/not in set()


判断元素是否存在集合内
2.2.2.定义
2.2.2.1.定义方式


逗号分隔开多个元素
s = {1,2,3,4,}
print(type(s)) # class 'set'
2.2.2.2.注意点


1、每一个元素都应该是不可变类型
s = {1,2,[1,2]}
print(s) # 报错


2、集合内元素不能重复
s = {1,2,1,1,1,1}
print(s) # {1,2}


3、集合内元素无序,不支持索引取值
s = {1,2}
print(s[0]) # 报错
3.文件处理
3.1.什么是文件


文件是操作系统为应用程序或者用户提供的一个操作硬盘的虚拟单位。
3.2.为什么要有文件


应用程序经常需要将内存的数据永久保存下来,而应用程序无法直接操作硬件,只能通过操作系统的虚拟单位去间接的操作硬盘。
3.3.如何用文件
3.3.1.控制操作系统打开文件的两种方式
3.3.1.1.f = open(r'文件路径‘, mode='r',encoding='utf8')


open(r'文件路径‘, mode='r',encoding='utf8')
打开文件是操作系统在打开文件,操作系统默认的编码是gbk编码,如果写文件时用的编码是utf8编码,则会报编码错误,因此得把操作系统默认编码修改成utf8编码
3.3.1.1.1.r'文件路径'中r的解释


r'文件路径'
r  = rawstring(原声字符串,文件路径使用r可以不需要转义)
3.3.1.1.2.文件open用encoding的原因


open(r'文件路径‘, mode='r',encoding='utf8')
打开文件是操作系统在打开文件,操作系统默认的编码是gbk编码,如果写文件时用的编码是utf8编码,则会报编码错误,因此得把操作系统默认编码修改成utf8编码
3.3.1.1.3.f.read()


一次性把硬盘中的某个文件中的所有数据读入内存,基于当前位置读
3.3.1.1.4.f.close()


回收操作系统资源
3.3.1.1.4.1.f.close()注意事项


不能先使用del f,再使用f.close(),因为先使用del,python会删除f对应的操作系统资源,f.close()时f已经没有对应的值了
3.3.1.1.5.open打开文件总结


1、打开文件
2、读/写文件
3、关闭文件
3.3.1.2.with open(r'文件路径‘, mode='r',encoding='utf8')as f
3.3.1.2.1.打开多个文件


with open(r'文件路径1‘, mode='r',encoding='utf8')as f1/
with open(r'文件路径2‘, mode='r',encoding='utf8')as f2:
3.3.1.2.2.\r\n了解知识点


open()会将换行符\n自动转换成\r\n以满足各个平台不同换行符的需求。
测试方法:先wt模式写入'1\n2\n3',然后再用rt.readlines()模式读出内容,会读出['1\r\n', '2\r\n', '3']
3.3.2.如何打开文件
3.3.2.1.文件打开的三种模式(纯净)
3.3.2.1.1.r模式(默认)


只读
1、文件不存在则报错
2、文件存在,并且文件指针调到文件的开头
3.3.2.1.1.1.f.read()


一次性把硬盘中的某个文件中的所有数据读入内存
3.3.2.1.1.2.f.readline()


只读文件中的一行,后面有一个换行符
3.3.2.1.1.3.f.readlines()


读取文件所有行并存入列表,把文件的每一行存成列表中的元素
3.3.2.1.2.w模式


只写
文件不存在则创建一个空文档,并且文件指针跳到文件的开头
文件存在,会将内容清空,并且文件指针跳到文件的开头


强调:如果每次都是重新打开文件,那么文件内容总会清空,指针跳到开头
如果在文件不关闭的情况下,连续的写入,本次写入会基于上一次指针所在的位置往后继续写。


3.3.2.1.2.1.f.write()


写入内容


with open...
l = [1,2,3]
for i in l:
f.write(i)
上面的循环写入等同于f.writelines(l)
3.3.2.1.2.2.f.wirtelines()


with open...
l = [1,2,3]
f.writelines(l)
3.3.2.1.3.a模式


只追加读写
文件不存在则创建一个空文档,并且文件指针跳到文件的末尾
文件存在,文件指针跳到文件的末尾
3.3.2.1.3.1.f.write()


简单的追加模式,在文件末尾加入()内的传入的值
3.3.2.1.3.2.f.writelines()


循环取出()内的内容在文件末尾追加写入
3.3.2.2.控制文件内容的两种方式
3.3.2.2.1.注意事项


不能单独使用,必须与r、w、a连用
3.3.2.2.2.t文本模式(默认)


text文本模式,该模式下操作文件内容的单位都是字符,该模式只适用于文本文件
强调:该模式下必须指定encoding=‘某种字符编码’
3.3.2.2.2.1.注意事项


循环读取文本每一行,如果打印不把end改成end=''
,则会多跳转一行,也就是说文本的每一行末尾的\n都会被打印出来
3.3.2.2.3.b二进制模式


bytes二进制模式,该模式下操作文件的内容的单位都是bytes,该模式只适用于所有类型的文件。
注意:一定不能指定encoding参数
3.3.2.2.3.1.文件通用读取


with open(' ','rb') as f:
data = f.read()
res = data.decode('utf8')
print(res)


3.3.2.2.3.2.文件通用写入


with open(' ','wb') as f:
f.write('有德无敌帅'.encode('utf8')


3.3.2.2.3.3.注意事项


bytes类型中\n不会被识别
3.3.2.3.文件是否可读写判断
3.3.2.3.1.f.readable(f)


判断文件是否可读
可读的打开方式r
3.3.2.3.2.f.writeable(f)


判断文件是否可写
可写的打开方式w和a
3.3.2.4.遍历文件的方式 


防止文件过大,一次性打开卡死内存
with open...
for line in f:
print(line)
3.3.2.5.文件打开的另三种模式(了解)


r+ 可读可写(无论指针在哪里都在文件末尾写入)
w+ 可写可du
a+ 可追加写可读
3.4.补充知识点sys.argv


命令行中运行python解释器时,sys.argv会获取python解释器后的源文件路径以及你输入的其他东西并存入列表
3.5.拷贝文件


import sys


with open(sys.argv[1],'rb') as read_f,\
    open(sys.argv[2],'wb') as write_f:
    for line in read_f:
        write_f.write(line)
3.6.文件内指针操作
3.6.1.f.seek(n, 0/1/2)


seek(n)单位统一就是字节
第一个参数:控制移动的字节数
第二个参数:控制移动的参照物,值可以为0(默认),1,2


0:参照文件开头
强调:除了0模式以外的模式都只能在b模式下使用,即1和2模式只能用在b模式下
1:参照当前位置
2:参照文件末尾


f.seek(0,0) # 回到文件头
with open('', 'r', encoding='utf-8') as f:
    f.read()  # 指针读到文件末
    f.seek(0, 0)  # 指针初始化到文件头
    print('我又可以打印一次read了', f.read())  # 再一次打印出文本内容


注意:seek单位是字节,如果文本第一个字符是中文,然而seek读取的是2个字节,则会报错
补充:utf8编码内中文3个字符,英文1个字符
3.6.2.f.read(n)


读取n个字节的内容
3.6.2.1.n的注意事项


read(n)
n在t模式下以字符为单位
n在b模式下以字节为单位
3.6.3.f.tell()


告诉你当前的位置
3.6.4.f.truncate(n)


截断文件
从文件开头截取到n个bytes的位置,其余的删除
3.7.修改文件
3.7.1.文本编辑器修改文件的原理


1、先将文件内容全部读入内存
2、在内存中修改完毕
3、将修改的结果覆盖写回硬盘




3.7.2.修改文件方式
3.7.2.1.全部读取后写入


1、先将文件内容全部读入内存
2、在内存中修改完毕
3、将修改的结果覆盖写回硬盘


with open...r
data = f.read()
new_data = data.reaplace('alex', 'alexdsb')
print(new_data)


with open...w
f.write(new_data)


缺点:占内存高
优点:修改期间硬盘同一时刻只有一份数据
3.7.2.2.一行一行读一行一行写


1、以读的模式打开源文件,以写的模式打开一个临时文件
2、然后用for循环读取一行行内容,每读一行则修改一行,将修改的结果写入临时文件,直到把源文件都遍历完
3、删除源文件,将临时文件重命名为原文件名


import os


with open('txt', 'r', ..) as read_f,/
open('new_txt', 'w', ..) as write_f:
for line in f:
if ’alex‘ in line:
line = line.replace('alex', 'alexadb')
write_f.write(line)


os.remove('txt')
os.rename('new.txt', 'txt')


优点:同一时刻在内存中只存在文件的一行内容
缺点:修改期间硬盘同一时同一份数据会有两份
4.函数
4.1.什么是函数


函数是具备某一特定功能的工具
函数的使用必须遵循先定义、后调用的原则
4.1.1.内置函数
4.1.2.自定义函数
4.2.为什么要用函数


1、程序的组织结构不清晰、可读性差
2、日积月累冗余代码过多
3、程序的可扩展性极差
4.3.如何用函数
4.3.1.定义函数
4.3.1.1.语法


def 函数名(参数1, 参数2, 参数3):
'''
文档注释
'''
code1
code2
code3
...
return 返回值(默认为None)
4.3.1.2.无参函数


def func():
print('')
4.3.1.3.有参函数


def func(x,y):
print('')
4.3.1.4.空函数


def func():
pass
4.3.1.5.定义函数发生的事情


函数名对应函数的内存地址
只检测语法,不执行代码
4.3.2.调用函数
4.3.2.1.表达式形式


print(max(1,2))
4.3.2.2.当作参数传给其他函数


print(max(max(1,2),3))
4.3.2.3.函数返回值
4.3.2.3.1.什么是函数的返回值


函数的返回值是函数体代码运行的一个成果
4.3.2.3.2.什么时候用函数的返回值


需要函数返回一个确切值的时候
4.3.2.3.3.如何用返回值


1、返回值没有类型限制
2、返回值没有个数限制
逗号分隔开以元组的形式返回多个值
一个值:返回一个值


return是函数结束的标志:
函数内可以有多个return,但只要执行一次次整个函数就会立即结束,并且将return后的值当作本次调用的结果返回
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值