复习内容
类型转换:
1. 数字类型:int() bool() float()
2. srt与int(): int('10') int('-10') int('0') float('-.5') float('3.14') str转int类型只能是整数或者浮点数,否则会报错
str(数字) int转str类型都可以转换。转换完成后是字符串类型
3. 重点---str与list相互转换
字符串转列表案例:
发
a = 'abc'
b = list(a)
print(b) # 输出结果['a', 'b', 'c']
列表转字符串:
a = ['a', 'b', 'c']
b = ''.join(a) #使用join来连接列表中的各各元素
print(b) # 输出结果 'abc'
print(type(b)) # 类型是str类型
字符串分割,分割后的都一个列表
a = 'abc|def|ghj'
b = a.split('|') #此处使用split以 '|' 号分割
print(b) # 此处输出结果为['abc', 'def', 'ghj'] 字符串分割后会得到一个列表
再变回字符串:
a = ['abc', 'def', 'ghj']
b = '|'.join(a) # 此处使用join来连接列表中的元素
print(b) # 此处输出结果为abc|def|ghj
4. list set tuple 类型的相互转换()
直接在()内添加相对应的类型
比如:
a = ['abc', 'def', 'ghj']
b = set(a)
print(b) # 输出结果就是一个集合{'def', 'ghj', 'abc'}
a = ['abc', 'def', 'ghj']
b = tuple(a)
print(b) # 输出结果就是一个元祖('abc', 'def', 'ghj')
5. list 与dict:
a = 'a=1&b=2&c=3' # 定义字符串
# [('a', '1'), ('b', '2'), ('c', '3')] # 目标列表
b = a.split('&') # 使用'&'来分割字符串 得到的结果是['a=1', 'b=2', 'c=3'] 一个列表类型
l = [] # 定义一个空列表来装值
for i in b: # 循环取到列表中的字符串(对应上次分割后的列表)
c = tuple((i.split('='))) # 此处强转,使用tuple来改变他分割后的小列表,转换成元祖
l.append(c) # 添加到定义的空列表中
print(l) # 输出的值为[('a', '1'), ('b', '2'), ('c', '3')]
再把列表转化为字典:
{'a': '1', 'b': '2', 'c': '3'} # 目标字典
dic = {} # 先定义一个空列表
for k,v in l: # 使用两个变量来接受列表中的两个值 因为列表循环是依次取值
dic[k]=v # 然后字典中的key (此处的dic[k]是把k取到的值作为它的key) 来对应他的value (dic[k] = v)
print(dic) # 返还的结果是{'a': '1', 'b': '2', 'c': '3'}
6.可以通过字典构建任意数据的映射关系
type_map = {
1: '壹', # value 可以是字符串
'壹': 1, # 可以为数字
'owen':(1, 88888), # 可以为元祖,或者列表,字典,集合。
'add': add # add是功能(函数) # 甚至是函数。所有的类型都可以为value
}
# 普通字符串:u'以字符作为输出单位'
print(u'abc') # 可以为一个字节的字母或者数字输出
print(u'李') # 也可以为三个字节的中文输出
# 二进制字符串:b'' 二进制字符串以字节作为输出单位
print(b'abc') # 必须使用一个字节的字符输出
print(b'李') # 如果输入超过一个字节,比如为三个字节的中文,会直接报错
# 原义字符串:r'以字符作为输出单位,所有在普通字符串中能被转义的符号在这都原样输出'
print(u'a b c') # 如果此处加上转义字符,他会按照转义字符输出
print(r'a b c') # 如果是r,此处的转义符号会变成普通的符号输出。所以r叫原义字符
print(r'F:python8期课堂内容day08代码1.三种字符串.py') # 比如打印这个文件路径,如果字符串前方不加r,内部的转义字符会有效果
# 文件:就是硬盘的一块存储空间
# 使用文件的三步骤:
# 1.打开文件- 得到文件对象:找到数据存放在硬盘的位置,让操作系统持有该空间,具有操作权
# 硬盘空间 被 操作系统持有
# 文件对象f 被 应用程序持有
f = open('1.三种字符串.py', 'r', encoding='utf-8')
# 2.操作文件
f = open('day8作业.py','r',encoding='utf-8')
data = f.read() # read() 将内容一次性读完
print(data)
# data = f.read(10) # 读取指定字符数
# print(data)
# data = f.readline() # 一次读取一行(文件的换行标识就是结束本次读取的依据)
# print(data)
# data = f.readlines() # 将所有内容读存,按换行标识作为读取一次的依据,存放为列表
# print(data)
# 3.释放资源
f.close() # 让操作系统释放硬盘空间资源
# del f # 应用程序释放对对象的持有
wf = open('target.txt', 'w', encoding='utf-8')
wf.write('123 ')
wf.write('456 ')
wf.flush() # 向操作系统发送一条将内存中写入的数据刷新到硬盘
wf.write('789 ')
wf.writelines(['abc ', 'def ', 'xyz '])
wf.close() # 1.将内存中写入的数据刷新到硬盘 2.释放硬盘空间
'''
# 文件操作必须打开文件资源,操作完毕后必须释放文件资源
# with...open就是优化整合了文件资源的打开与释放
'''主模式:r | w | a | -- 主模式只能选取一个,规定着主要的操作方式
从模式:t | b | +
-- 从模式也必须出现,但个数不一定是一个,为主模式额外添加功能
'''
# 1、r:文件必须提前存在,不存在报错
# 2、w:文件可以存在,也可以不存在,存在则清空后写入,不存在新建后写入
# 3、a:文件可以存在,也可以不存在,存在在之前内容的末尾追加写入,不存在新建后写入
# 4、x:文件必须不存在,它会自动创建后写入,如果存在,就报错 - 了了解
# 5、从模式t:以字符形式操作文本内容,t模式下只能操作文本文件 - 默认模式
# rt: 文件必须提前存在,不存在报错,文件操作采用字符形式 - 简写为 r
# wt: 文件可以存在,也可以不存在,存在则清空后写入,不存在新建后写入,文件操作采用字符形式 - 简写为 w
# at: 文件可以存在,也可以不存在,存在在之前内容的末尾追加写入,不存在新建后写入,文件操作采用字符形式 - 简写为 a
# 6、从模式b:以二进制字节操作内容,可以操作所有类型文件,二进制下不需要进行编码规定
# 重重点:用for循环直接循环文件对象,可以从文件对象中一行一行获取内容
# 7、从模式+:可读可写
# r+t:文件必须存在的可读可写,默认从头开始替换写,按字符操作
# w+t:文件存在清空不存在创建的可读可写,按字符操作
# a+t:文件存在追加不存在创建的可读可写,按字符操作
# r+b:文件必须存在的可读可写,默认从头开始替换写,按字节操作
# w+b:文件存在清空不存在创建的可读可写,按字节操作
# a+b:文件存在追加不存在创建的可读可写,按字节操作
# 不同的操作系统,默认编码不一致,必须目前操作编码 ,t模式下,必须根据文件的编码来设置操作文件对象的编码
b模式下 文件在硬盘中本质就是按二进制存储,所已经可以直接读取二进制,文件写入内容是,内容必须为二进制数据,那么数据就已经是其他通过某种编码处理好的数据,形成的文件一定就是采用处理的那个编码
# 文本文件的复制:可以t也可以b
with open('abc.txt','r',encoding='utf-8') as rf: # 首先以只读模式打开起始文件
with open('def.txt','w',encoding='utf-8') as wf: # 然后用'w'模式,创建一个新的文件
for line in rf : # 遍历起始文件
wf.write(line) # 然后使用新文件来接受遍历起始文件的数据 这样就复制了起始文件的内容到了新文件
with open('abc.txt','rb') as rf: # 然后使用二进制只读打开
with open('xyz.txt','wb') as wf: # 使用'wb'创建新文件夹来接受,以二进制的方式来写入
for line in rf: # 遍历起始文件
wf.write(line) # 然后使用新文件来接受遍历起始文件的数据 这样就复制了起始文件的内容到了新文件
# 非文本文件只能采用b模式操作,不需要指定编码 - 因为根本不涉及编码解码过程
# 1.游标操作的是字节,所有只能在b模式下进行操作
# 2.游标操作可以改变操作位置,r模式下可以改变位置进行操作,所有主模式选择r模式
# 3.seek(offset, whence):
# -- offset为整数就是往后偏移多少个字节,负数就是往前偏移多少个字节
# -- whence:0代表将游标置为开头,1代表从当前位置,2代表将游标置为末尾