Python基础笔记-06

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')

你可能感兴趣的:(Python基础笔记-06)