【一个任务】
这节课我们来完成一个任务:
将文件record.txt中的数据进行分割,并按照以下规律保存起来:
1.小甲鱼的对话单独保存为boy_*.txt的文件(去掉"小甲鱼:")
2.客服的对话单独保存为girl_*.txt的文件(去掉"客服:")
3.文件中共有4段对话,分别保存为boy_1.txt, girl_1.txt, boy_2.txt, girl_2.txt, boy_3.txt, girl_3.txt,
boy_4.txt, girl_4.txt 共8个文件。
PS: 文件中不同的对话间已经使用"========"分割了
文件如下:
f = open( 'record.txt' ) #由于python文件和txt文件在同一个文件夹,所以不用加绝对路径
boy = []
girl = [] #初始化两个列表,一会用于存放文件信息
counter = 1 #初始化计数器
for each_line in f:
if each_line[:6] != '======': #这里只判断前六个符号,前六个不是等号就可以了,不用判断那么长
#这里进行字符串分割操作
(role, line_spoken) = each_line.split(':',1) #注意:split()中的冒号要和文件中的一致,否则报错。
if role == '小甲鱼':
boy.append(line_spoken)
if role == '客服':
girl.append(line_spoken)
else:
#这里进行文件的分别保存操作
file_name_boy = 'boy_' + str(counter) + '.txt'
file_name_girl = 'girl_' + str(counter) + '.txt'
boy_file = open( file_name_boy, 'w' ) #打开文件
girl_file = open(file_name_girl, 'w') #打开文件
#前面已经将小甲鱼和客服的对话保存在了boy和girl这两个序列中
boy_file.writelines( boy ) #写入文件(由前面的知识知道,将序列写入文件需要使用writelines()这个内置方法)
girl_file.writelines( girl ) #写入文件
boy_file.close() #文件写入完后一定要记得关闭
girl_file.close() #如果不关闭文件,那么写入的内容会一直保存在缓冲区里,不会写入到文件中
boy =[] #别忘了对这两个序列进行初始化,以便下次写入
girl = [] #同上
counter += 1 #计数器加1
f.close() #使用完文件要记得关闭 !
print('文件分割完毕!')
上面的代码有一个小小的问题,即:文件的保存是在遇到"======"后进行的,故如果不在最后一段
加上"======"的话,最后一段文字是只被分割而未被保存的。所以要解决上面的问题,可以在文字
中的底部加上"======",或者在代码跳出for循环后加上保存文件的代码。但是如果在for循环结束
后加保存代码又会显得程序非常臃肿,所以我们应该使用函数来替代重复代码,这样程序才会更加
简洁。如下:
def function():
#这里进行文件的分别保存操作
file_name_boy = 'boy_' + str(counter) + '.txt'
file_name_girl = 'girl_' + str(counter) + '.txt'
boy_file = open( file_name_boy, 'w' ) #打开文件
girl_file = open(file_name_girl, 'w') #打开文件
#下面的主程序中已经将小甲鱼和客服的对话保存在了boy和girl这两个序列中
boy_file.writelines( boy ) #写入文件(由前面的知识知道,将序列写入文件需要使用writelines()这个内置方法)
girl_file.writelines( girl ) #写入文件
boy_file.close() #文件写入完后一定要记得关闭
girl_file.close() #如果不关闭文件,那么写入的内容会一直保存在缓冲区里,不会写入到文件中
#【程序入口在此处】
f = open( 'record.txt' ) #由于python文件和txt文件在同一个文件夹,所以不用加绝对路径
boy = [] #初始化两个列表,一会用于存放文件信息
girl = []
counter = 1 #初始化计数器,为了给文件名标注序号
for each_line in f:
if each_line[:6] != '======': #这里只判断前六个符号,前六个不是等号就可以了,不用判断那么长
#这里进行字符串分割操作
(role, line_spoken) = each_line.split(':',1) #注意:split()中的冒号要和文件中的一致,否则报错。
if role == '小甲鱼':
boy.append(line_spoken)
if role == '客服':
girl.append(line_spoken)
else:
function() #遇到"======"就保存文件
boy =[] #别忘了对这两个序列进行初始化,以便下次写入
girl = [] #同上
counter += 1 #计数器加1
function() #保存分割出来的最后一段文件
f.close() #使用完文件要记得关闭 !
print('文件分割完毕!')