任务:将文件(record.txt)中的数据进行分割,并安装以下规则保存起来。
  1.小甲鱼的对话单独保存为boy_*.txt的文件(去掉"小甲鱼:")
  2.小客服的对话单独保存为girl_*.txt的文件(去掉"小客服:")
  3.文件中总共有三段对话,分别保存为boy_1.txt、boy_2.txt、boy_3.txt、gilr_1.txt、gilr_2.txt、gilr_3.txt
      共6个文件。(提示:不同的对话已经使用"===="进行分割)

代码清单1:

#打开record.txt文件
f = open('E:\\python\\record.txt') #定义3个变量,并对它们初始化
boy = []
girl = []
count = 0 #循环读取文件
for each_line in f: #如果当前内容不"======",则继续读取内容;否则读取,开始写操作
if each_line[:6] != "======": #读取的内容以":"进行分割,分割后分别赋值给元组元素role和spoken
(role,spoken) = each_line.split(':',1) #如果对话角色为"小甲鱼",则将文件追加到boy列表中
if role == '小甲鱼':
boy.append(spoken) #如果对话角色为"小客服",则将文件追加到girl列表中
if role == '小客服':
girl.append(spoken)
else:
#定义输出文件名称
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') #writelines的参数是序列(比如列表),它会迭代帮你写入文件。
boy_file.writelines(boy)
girl_file.writelines(girl) #关闭文件对象
boy_file.close()
girl_file.close() #当前写操作完毕后,必须进行初始化操作,以准备下一个的写入操作
boy = []
girl = []
count += 1 #因为第三段对话的结尾没有"===",所以需要再次进行上门的重复写操作,保存第三段对话
#定义输出文件名称
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') #writelines的参数是序列(比如列表),它会迭代帮你写入文件。
boy_file.writelines(boy)
girl_file.writelines(girl) #关闭文件对象
boy_file.close()
girl_file.close() #关闭文件对象
f.close()

代码清单2:

#定义一个保存文件的方法
def save_file(boy,girl,count): #定义输出文件名称
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') #writelines的参数是序列(比如列表),它会迭代帮你写入文件。
boy_file.writelines(boy)
girl_file.writelines(girl) #关闭文件对象
boy_file.close()
girl_file.close() #定义一个读取和分割文件内容的方法
def read_file(filename): #打开record.txt文件
f = open('E:\\python\\record.txt') #定义3个变量,并对它们初始化
boy = []
girl = []
count = 0 #循环读取文件
for each_line in f: #如果当前内容不"======",则继续读取内容;否则读取,开始写操作
if each_line[:6] != "======": #读取的内容以":"进行分割,分割后分别赋值给元组元素role和spoken
(role,spoken) = each_line.split(':',1) #如果对话角色为"小甲鱼",则将文件追加到boy列表中
if role == '小甲鱼':
boy.append(spoken) #如果对话角色为"小客服",则将文件追加到girl列表中
if role == '小客服':
girl.append(spoken) else:
#保存文件
save_file(boy,girl,count) #保存完文件后,再初始化变量
boy = []
girl = []
count += 1 #因为第三段对话的结尾没有"===",所以需要再调用save_file方法,保存第三段对话
save_file(boy,girl,count) #关闭文件对象
f.close() #主方法:只要调用read_file就可以完成所有的操作
read_file('E:\\python\\record.txt')

问题延伸: 如下图:为什么boy[]、girl[]、count位置不同,结果完全不同呢?

原因分析:
   因为boy,girl,count三个变量是做为split_file()函数的局部变量,当把它们放在split_file()里面的时候,是对3个变量进行了初始化。
   但是当你把它们放到下面save_file()函数里面的时候,就是在save_file()函数里面重新定义了三个名叫boy, girl,count的变量,
   那么它和split_file()函数里面的变量是完全没有关系的。

一个任务:(小甲鱼python视频第29讲) 代码整理与总结的更多相关文章

  1. 小甲鱼python视频第八讲(课后习题)

    1.for循环的使用,注意下面代码的区别 for i in range(0,10,2): print("i love you") for i in range(0,10): pri ...

  2. 小甲鱼python视频第七讲(课后习题)

    1.assert的作用. assert用来判断语句的真假,如果为假的话将触发AssertionError错误. 如果为真则继续执行. 2.变量互换(注意顺序) 3.成员资格运算符(in) 4.分数的划 ...

  3. 小甲鱼python视频弟十一讲(课后习题)

    1.修改列表里的值 list1 = [,,[,,,[,,,,] list1[] = print(list1) list1[][][] = '?' print(list1) 2.列表的排序(sort) ...

  4. 小甲鱼python视频第十讲(课后习题)

    1.list1[0]与list1[0:1]的区别 2.分片的步长 3关于列表的copy(注意list2与list3的区别) list1 = [,,,,,,] list2 = list1[:] list ...

  5. 小甲鱼python视频第九讲(课后习题)

    1.列表里可以存放什么东西? 可以存放任何的数据类型, list1 = ['我爱你','i love you',1314] print(list1) 2.向列表中添加元素 append(将参数作为一个 ...

  6. 小甲鱼Python视频课后答案(第一讲)---仅记录学习

    1.python是什么语言? Python是一种支持面向对象的解释性高级语言,属于脚本语言的一种. 2.IDLE是什么? IDLE是开发python程序的基本IDE(集成开发环境),具备基本的IDE的 ...

  7. 小甲鱼python视频弟十二讲(关于字符串的方法及注释下)

    1,ljust(width[, fillchar])  width -- 指定字符串长度. fillchar -- 填充字符,默认为空格. 用法:返回一个原字符串左对齐,并使用空格填充至指定长度的新字 ...

  8. 小甲鱼python基础教程飞机大战源码及素材

    百度了半天小甲鱼python飞机大战的源码和素材,搜出一堆不知道是什么玩意儿的玩意儿. 最终还是自己对着视频一行行代码敲出来. 需要的同学点下面的链接自取. 下载

  9. 小甲鱼python疑难点

    1.python生成器 2.while 1: num = input('请输入一个整数(输入Q结束程序):') if num != 'Q': num = int(num) print('十进制 -&g ...

随机推荐

  1. power designer 连接mysql提示“connection test failed”

    本机环境: win10 64位 jdk8 64位 问题: 测试连接时,总是提示 根据网上搜索: 根源在于:PowerDesigner based on 32 bit JVM kernel 参考: ht ...

  2. 面向对象进阶---attr家族

    一. isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查obj是否是类 cls 的对象 class Foo: pass ob ...

  3. TSQL:A表字段与B表中的关联,关联条件中一列是随机关联的实现方式

    A表字段与B表中的关联,关联条件中一列是随机关联的实现方式 create table test( rsrp string, rsrq string, tkey string, distan strin ...

  4. 原生js的一些研究和总结(1)

    数据类型 基本类型值包括: undefined,null,Boolean,Number和String,这些类型分别在内存中占有固定的大小空间,它们的值保存在栈空间,我们通过按值来访问的. 引用类型包括 ...

  5. iconfont字体图标和各种CSS小图标

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! iconfont字体图标 我们的需求中,很多时候会看到一些小的图形,或者叫图标,比如天猫网站中:     ...

  6. 关于if后面直接加上参数名,不加条件的用法

    <template> <section> <p v-if="aa">{{aa}}</p> <p v-if="bb&q ...

  7. html学习之多行文本

    代码如下: <body> <form action="post"> <!--wrap设置多行文本是否自动换行--> <textarea n ...

  8. TCP/IP学习笔记(二):TCP连接的建立与终止

    TCP连接的三次握手: (1)请求短发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号ISN(1415535521),报文段中SYN=1:TCP规定:SYN报文段不能携带数据,但是要消耗一个 ...

  9. Win10 VS2012 无法注册IIS4.0 解决方案

    死活注册不上,度娘也找了,最终找到只要打个补丁就行. 安装: Microsoft Visual Studio 2012 更新 (KB3002339) 下载:http://www.microsoft.c ...

  10. 初探Javascript之Canvas

    什么是Canvas <canvas>是 HTML5 新增的元素,可使用JavaScript脚本来绘制图形. canvas是一个矩形区域,您可以控制其每一像素. 引入Canvas ```ht ...