任务:将文件(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. JavaScript中Array数组的方法

    查找: indexOf.lastIndexOf 迭代:every.filter.forEach.map.somereduce.reduceRight 用法: /* 1 查找方法: * arr.inde ...

  2. scrollTop doesn't scroll on Chrome 61

    在chrome61 不支持滚动 解决方案: Use document.scrollingElement if supported, and fall back to the current code. ...

  3. 解决:My97DatePicker 日期插件引用在PHP文件中maxDate和minDate控制失效问题

    开发环境: 语言:PHP 框架:ThinkPHP 问题:在引用插件My97DatePicker时,想实现:开始日期不能大于结束日期,结束时间不能小于开始时间 步骤一.查看文档官方文档http://ww ...

  4. 最短路径之Dijkstra算法

    Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法能得出最短路径的最优 ...

  5. building a new horizon

    昨天是4月14日,也是我的23岁生日.正好去参加GDG举办的WTM,这次的主题是building a new horizon. 写一下印象深刻的分享者和她们的闪光点. 1.羡辙-从灵感到落地 羡辙是在 ...

  6. Java面试题—初级(7)

    作为一枚Java后端开发者,数据库知识必不可少,对数据库的掌握熟悉度的考察也是对这个人是否有扎实基本功的考察.特别对于初级开发者,面试可能不会去问框架相关知识,但是绝对不会不去考察数据库知识,这里收集 ...

  7. ML笔记:Classification: Probabilistic Generative Model

    用回归来做分类: 远大于1的点对于回归来说就是个error, 为了让这些点更接近1,会得到紫色线. 可见,回归中定义模型好坏的方式不适用于分类中.---回归会惩罚那些太过正确的点 如何计算未出现在训练 ...

  8. [AHOI 2016初中组]迷宫

    Description 小雪和小可可被困在了一个无限大的迷宫中. 已经知道这个迷宫有 N 堵环状的墙,如果把整个迷宫看作是一个二维平面,那么每一堵墙都是平面上一个圆.任意两个圆不相交,不重合,也不会相 ...

  9. hihocoder 1388 fft循环矩阵

    #1388 : Periodic Signal 时间限制:5000ms 单点时限:5000ms 内存限制:256MB 描述 Profess X is an expert in signal proce ...

  10. 【USACO12JAN】视频游戏的连击Video Game Combos

    题目描述 Bessie is playing a video game! In the game, the three letters 'A', 'B', and 'C' are the only v ...