任務:將文件(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()函數里面的變量是完全沒有關系的。