51.集合
>>> num={}
>>> type(num)
>>> num2={1,2,3,4,5}
>>> type(num2)
1)唯一性:将重复数据自动清理
>>> num2={1,2,3,4,5,5,4,3,2}
>>> num2
{1, 2, 3, 4, 5}
2)无序性:不支持索引
3)创建集合
【1】直接用花括号
【2】使用set方法:参数需要是一个序列
>>> num3={1,2,3,4,5,6}
>>> num4=set([1,2,3,4,5,5])
>>> num4
{1, 2, 3, 4, 5}
4)如何访问集合中的元素:
【1】利用for访问每一个元素
【2】利用in和not in校验元素是否在集合中
5)增加和删除某个集合中元素
>>> num4.add(6)
>>> num4
{1, 2, 3, 4, 5, 6}
>>> num4.remove(5)
>>> num4
{1, 2, 3, 4, 6}
6)不可变集合:用forzenset方法去生成一个集合即可
>>> num5=frozenset([1,2,3,4,5,6])
>>> num5.add(0)
Traceback (most recent call last):
File "", line 1, in
num5.add(0)
AttributeError: 'frozenset' object has no attribute 'add'
52.文件
1)open函数:以下是打开方式的参数说明
r:以只读模式打开(默认)
w:以写入的方式打开文件,会覆盖已存在的文件
x:如果文件已经存在,使用此模式打开将引发异常
a:以写入模式打开,如果文件存在,则再末尾追加写入
b:以二进制模式打开文件
t:以文本模式打开
+:可读写模式(可添加到其他模式中使用)
U:通用换行符支持
53.打开文件
>>> f=open('D:\\record.txt')#注意需要用两个\\
>>> f
<_io.TextIOWrapper name='D:\\record.txt' mode='r' encoding='cp936'>
54.文件操作方法
1)f.close():关闭文件
2)f.read(size=-1):从文件读取size个字符,当未给定size或给定负值的是哦胡,读取剩余的所有字符,然后作为字符串返回
【1】全部读出
>>> f.read()
"小客服:小甲鱼,今天有客户问你有没有女朋友?\n小甲鱼:咦??\n小客服:我跟他说你有女朋友了!\n小甲鱼:。。。。。。\n小客服:她让你分手后考虑以下她!然后我说“您要买个优盘,我就帮您留一下~”\n小甲鱼:然后呢?\n小客服:她买了两个,说发一个货就好~\n小甲鱼:呃。。。。。。你真牛!\n小客服:那是,谁让我是鱼C最可爱的小客服嘛~\n小甲鱼:消磁有人想调戏你我不阻止~\n小客服:滚!!!\n=================================================================================\n小客服:小甲鱼,有个好评很好笑哈。\n小甲鱼:哦?\n小客服:“有了小甲鱼,以后妈妈再也不用担心我的学习了~”\n小甲鱼:哈哈哈,我看到吖,我还发了微博呢~\n小客服:嗯嗯,我看到了你的微博呀~\n小甲鱼:吆西~\n小客服:那个有条回复“左手拿着小甲鱼,右手拿着打火机,哪里不会点哪里,so easy(●'?'●)\n小甲鱼:/(ㄒoㄒ)/~~\n================================================================================================="
【2】读出部分
>>> f.read(5)
'小客服:小'
3)f.readline():以写入模式打开,如果文件存在,则再末尾追加写入
4)f.write(str):将字符串str写入文件
>>> f.write('I love caojin')
Traceback (most recent call last):
File "", line 1, in
f.write('I love caojin')
io.UnsupportedOperation: not writable
需要以w或者a的形式打开:
>>> f=open('D:\\test.txt','w')
生成一个文件
>>> f=open('D:\\test.txt','w')
>>> f.write('i love caojin')
13
>>> f.close()#这个时候test中就有这个写入了
5)f.writelines(seq):向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象
6)f.seek(offset,from):在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节
>>> f.seek(42,0)
42
>>> f.readline()
'?\n'
7)f.tell()返回当前在文件中的位置
>>> f=open('D:\\record.txt')
>>> f.read(5)
'小客服:小'
>>> f.tell()
10
8)列表化文件:用list将整个文本拆解成一个个元素的字符串组成的列表
>>> list(f)
['小甲鱼:咦??\n', '小客服:我跟他说你有女朋友了!\n', '小甲鱼:。。。。。。\n', '小客服:她让你分手后考虑以下她!然后我说“您要买个优盘,我就帮您留一下~”\n', '小甲鱼:然后呢?\n', '小客服:她买了两个,说发一个货就好~\n', '小甲鱼:呃。。。。。。你真牛!\n', '小客服:那是,谁让我是鱼C最可爱的小客服嘛~\n', '小甲鱼:消磁有人想调戏你我不阻止~\n', '小客服:滚!!!\n', '=================================================================================\n', '小客服:小甲鱼,有个好评很好笑哈。\n', '小甲鱼:哦?\n', '小客服:“有了小甲鱼,以后妈妈再也不用担心我的学习了~”\n', '小甲鱼:哈哈哈,我看到吖,我还发了微博呢~\n', '小客服:嗯嗯,我看到了你的微博呀~\n', '小甲鱼:吆西~\n', "小客服:那个有条回复“左手拿着小甲鱼,右手拿着打火机,哪里不会点哪里,so easy(●'?'●)\n", '小甲鱼:/(ㄒoㄒ)/~~\n', '=================================================================================================']
读取列表中的每个元素:
【1】方法1:将文本list化后循环读出
>>> f.seek(0,0)
0
>>> lines=list(f)
>>> for each in lines:
print(each)
【2】方法2:直接迭代f对象
>>> f.seek(0,0)
0
>>> for each in f:
print(each)
9)将文件record.txt中的数据进行分割,并按照以下规律保存起来:
--小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)
--小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)
--文件中总共有三段对话,分别保存为boy1_txt,girl_1.txt,boy_2.txt,girl_2.txt,boy_3.txt,girl_3.txt共6个文件(提示:文件中不同的对话间使用”=======“分割)
【1】无函数版本
f=open('D:\\record.txt') #打开record.txt文件并赋值给f对象
boy=[] #定义一个空boy列表用来容纳每个====号上面小甲鱼说的话
girl=[]#定义一个空girl列表用来容纳每个====号上面小客服说的话
count=1#定义一个变量用来计数第几个===区域以及动态的变动boy_n.txt中的n
for each_line in f: #利用打开的文件对象可以直接被迭代的性质读取每个\n分割开的字符串
if each_line[:6]!='======':#每次读取一段,就先用切片形式获取前6位看看是不是都是===,如果不是,则证明要么是小甲鱼说的,要么是小客服说的,就要准备进行往boy和girl里增加元素
#我们这里进行字符串分割
(role,line_spoken)=each_line.split(':',1)#定义一个元组,role用来承接每句话冒号前的字符串,line_spoken用来承接冒号后的字符串;其中利用字符串的split函数来进行冒号前后的分割
if role=='小甲鱼':#判断如果冒号前是小甲鱼,要准备把冒号后的字符串放入boy列表中
boy.append(line_spoken)
if role=='小客服':#判断如果冒号前是小客服,要准备把毛好后的字符串放入girl列表中
girl.append(line_spoken)
else:#for循环一直不停的读取每一句,当出现====的时候进入以下,将之前boy列表和girl列表中的东西都单独的存起来,并且按照boy_n.txt或者girl_n.txt来命名
#文件的分割保存操作
file_name_boy='boy'+str(count)+'.txt' #按照count的值定义文件名的字符串
file_name_girl='girl'+str(count)+'.txt'
boy_file=open(file_name_boy,'w')#以读的形式打开文件名的文件等于新建一个文件
girl_file=open(file_name_girl,'w')
boy_file.writelines(boy)#利用写入一个迭代器写入boy这个列表
girl_file.writelines(girl)
boy_file.close()#关闭文件
girl_file.close()
boy=[]#清空列表
girl=[]
count+=1#递增count
file_name_boy='boy'+str(count)+'.txt'两个=====部分都处理完后,第三次循环只是把内容都放入了list中,但是由于没有检索到===则第三部分文本没有被写入对应的txt中,所以再在循环外在来一次写入文件
file_name_girl='girl'+str(count)+'.txt'
boy_file=open(file_name_boy,'w')
girl_file=open(file_name_girl,'w')
boy_file.writelines(boy)
girl_file.writelines(girl)
boy_file.close()
girl_file.close()
f.close()
【2】函数版本
def save_file(boy,girl,count): #定义函数,作用是将已经收集好的boy和girl列表写入对应文件中
file_name_boy='boy'+str(count)+'.txt'
file_name_girl='girl'+str(count)+'.txt'
boy_file=open(file_name_boy,'w')
girl_file=open(file_name_girl,'w')
boy_file.writelines(boy)
girl_file.writelines(girl)
boy_file.close()
girl_file.close()
def split_file(file_name): #定义拆分函数,将小甲鱼和小客服的话分别拆分放入boy和girl列表中
f=open(file_name)
boy=[]
girl=[]
count=1
for each_line in f:
if each_line[:6]!='======':
#我们这里进行字符串分割
(role,line_spoken)=each_line.split(':',1)
if role=='小甲鱼':
boy.append(line_spoken)
if role=='小客服':
girl.append(line_spoken)
else:
#文件的分割保存操作
save_file(boy,girl,count)
boy=[]
girl=[]
count+=1
save_file(boy,girl,count)
f.close()
split_file('D:\\record.txt')