任务:将文件(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. 使用TortoiseSVN打Tag

    参考了 https://blog.csdn.net/liuzx32/article/details/9123401. 值得注意的点是: 选择路径的时候,不要先点进去自己建好叶子节点路径再选择该路径,会 ...

  2. Centos6.9minimal安装图形化界面

    有时我们会用到图形化界面来操作,下面介绍是在虚拟机上安装Centos6.9minimal版安装图形化界面(其他系统版本都类似吧,,,),如果是在物理机上安装进入的话要用的远程桌面工具VNC. VNC安 ...

  3. GNU/Linux需要特别注意的目录

    /bin         存放大多数系统命令,如cat.mkdir.mv.cp.tar.chmod等 /boot       存放开机所需要的文件,开机时载入开机管理程序(bootloader),并映 ...

  4. POJ-2031 Building a Space Station---MST + 空间距离

    题目链接: https://vjudge.net/problem/POJ-2031 题目大意: 就是给出三维坐标系上的一些球的球心坐标和其半径,搭建通路,使得他们能够相互连通.如果两个球有重叠的部分则 ...

  5. asp.net core 三 Nuget包管理

        参考连接:http://www.cnblogs.com/netcore2/p/7412891.html     这里的说明,基本就是学习了别人的文章,自己做了个备份     asp.net c ...

  6. UI前端开发都是做什么的以及html、css、php、js等究竟是神马关系

    第一个问题: 1.UI,是视觉方面的呈现.一个网页首先由UI完成整体设计,然后把每一个模块切图,例如组件.logo.版块等.常用工具:PS,AI,DW. 2.前端,是将UI的设计代码化,因为计算机无法 ...

  7. JavaScript实现图片轮播图

    <!DOCTYPE html><html> <head> <script > var time; function init(){ //设置定时操作 t ...

  8. 点击后退按钮回到本页面中的另一个标签页(tab)

    在使用zepto进行微信网页开发的时候,遇到一个情况,在本页面存在四个TAB栏,每点击一个栏会显示相应的内容,下图这种: 现在有一个需求是,用户点击了后退按钮,需要回到上一次点击的tab栏. 这个需求 ...

  9. crypto必知必会

    crypto必知必会 最近参加了个ctf比赛,在i春秋,南邮方面刷了一些crypto密码学题目,从中也增长了不少知识,在此关于常见的密码学知识做个小总结! Base编码 Base编码中用的比较多的是b ...

  10. java工厂设计模式初步

    没有利用反射机制定义的简单工厂类 interface Fruit{ public void eat(); } class Apple implements Fruit{ public void eat ...