任务:将文件(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. 命名参数名(含*args , * *kw的区别)

    要限制关键字参数的名字,就可以用命名关键字参数 # coding=utf-8 # 命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数.调用方式如下 def person(name, ...

  2. 转:swing 中paint与paintComponent的区别(jcomponent)

    http://blog.csdn.net/q597756870/article/details/17854247 查API文档,查得在类Jcomponent下的paint方法有以下解释:        ...

  3. Python面向对象进阶示例--自定义数据类型

    需求: 基于授权定制自己的列表类型,要求定制的自己的__init__方法, 定制自己的append:只能向列表加入字符串类型的值 定制显示列表中间那个值的属性(提示:property) 其余方法都使用 ...

  4. c语言文件中关于while(!feof(fp)) 循环多输出一次的问题

      文件中关于while(!feof(fp)) 循环多输出一次的问题   feof(fp)有两个返回值:如果遇到文件结束,函数feof(fp)的值为1,否则为0.   当读到文件末尾时,文件指针并没有 ...

  5. 关于web XSS注入问题

    对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,附带公司写的一个filer. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经 ...

  6. 小工具:批量导入导出主机上的docker镜像

    工作需要,将主机上的部分镜像导出为tar文件,放便在其他主机上使用 用python实现了一个批量打包脚本: import re import os import subprocess if __nam ...

  7. 线段树(单标记+离散化+扫描线+双标记)+zkw线段树+权值线段树+主席树及一些例题

    “队列进出图上的方向 线段树区间修改求出总量 可持久留下的迹象 我们 俯身欣赏” ----<膜你抄>     线段树很早就会写了,但一直没有总结,所以偶尔重写又会懵逼,所以还是要总结一下. ...

  8. .NET Core2.0+MVC 用Redis/Memory+cookie实现的sso单点登录

    之前发布过使用session+cookie实现的单点登录,博主个人用的很不舒服,为什么呢,博主自己测试的时候,通过修改host的方法,在本机发布了三个站点,但是,经过测试,发现,三个站点使用的sess ...

  9. PyQT5 helloworld教程(转载)

    转载节选自该博客地址:http://blog.csdn.net/u013401853/article/details/54581512,博主的步骤写的很详细,感谢! QT Creator安装 因为我们 ...

  10. Java操作属性文件与国际化

    在前面讲到的java类集中的Hashtable中,有一个子类Properties,此类定义如下: public class Properties extends Hashtable<Object ...