《零基础入门学习Python》相关习题:第029讲-文件
题目 0
注意:本文代码已写明相应注释,故文中不再赘述
将下面文件中的数据进行分割并按照以下规律保存起来:
–小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)
–小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)
–文件中总共有三段对话,分别保存为boy_1.txt, girl_1.txt,boy_2.txt, girl_2.txt, boy_3.txt, gril_3.txt共6个文件(提示:文件中不同的对话间已经使用“==========”分割)
1 小客服:小甲鱼,今天有客户问你有没有女朋友? 2 小甲鱼:咦?? 3 小客服:我跟她说你有女朋友了! 4 小甲鱼:。。。。。。 5 小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~" 6 小甲鱼:然后呢? 7 小客服:她买了两个,说发一个货就好~ 8 小甲鱼:呃。。。。。。你真牛! 9 小客服:那是,谁让我是鱼C最可爱小客服嘛~ 10 小甲鱼:下次有人想调戏你我不阻止~ 11 小客服:滚!!! 12 ================================================================================ 13 小客服:小甲鱼,有个好评很好笑哈。 14 小甲鱼:哦? 15 小客服:"有了小甲鱼,以后妈妈再也不用担心我的学习了~" 16 小甲鱼:哈哈哈,我看到丫,我还发微博了呢~ 17 小客服:嗯嗯,我看了你的微博丫~ 18 小甲鱼:哟西~ 19 小客服:那个有条回复“左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^” 20 小甲鱼:T_T 21 ================================================================================ 22 小客服:小甲鱼,今天一个会员想找你 23 小甲鱼:哦?什么事? 24 小客服:他说你一个学生月薪已经超过12k了!! 25 小甲鱼:哪里的? 26 小客服:上海的 27 小甲鱼:那正常,哪家公司? 28 小客服:他没说呀。 29 小甲鱼:哦 30 小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!! 31 小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。 32 小客服:滚!!!
附上我自己写的代码:
1 # 变量声明 2 f = open('homework.txt', 'r', encoding='utf-8') 3 sexual = [] 4 spoken_line = [] 5 boy = [] 6 girl = [] 7 count = 1 8 9 10 # 函数定义 11 def write_in(para_boy, para_girl): 12 global count 13 boy_file_name = 'boy_' + str(count) + '.txt' 14 girl_file_name = 'girl_' + str(count) + '.txt' 15 boy_file = open(boy_file_name, 'w') 16 girl_file = open(girl_file_name, 'w') 17 boy_file.writelines(para_boy) 18 girl_file.writelines(para_girl) 19 para_boy.clear() 20 para_girl.clear() 21 boy_file.close() 22 girl_file.close() 23 count += 1 24 25 26 def line_split(para_f, para_boy, para_girl): 27 global sexual, spoken_line 28 for each_line in para_f: 29 if each_line[:6] != '======': 30 [sexual, spoken_line] = each_line.split(':', 1) # 有一行里出现了两个冒号,故加以限制 31 if sexual == '小甲鱼': 32 para_boy.append(spoken_line) 33 if sexual == '小客服': 34 para_girl.append(spoken_line) 35 else: 36 write_in(para_boy, para_girl) 37 38 39 # 调用函数 40 line_split(f, boy, girl) 41 write_in(boy, girl) 42 f.close()
题目1
编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置,程序实现如图:

代码:
1 # 作业题1 2 # 编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置 3 file_name1 = input('请输入第一个文件名(加扩展名): ') 4 file_name2 = input('请输入第二个文件名(加扩展名): ') 5 f1 = open(file_name1, 'r', encoding='utf-8') 6 f2 = open(file_name2, 'r', encoding='utf-8') 7 count_line = 1 8 dict_dif_line = {} 9 10 11 def compare(para_f1_line, para_f2_line): 12 global dict_dif_line, count_line 13 for (each_word1, each_word2) in zip(list(para_f1_line), list(para_f2_line)): 14 if each_word1 != each_word2: 15 dict_dif_line.update({count_line: list(para_f1_line).index(each_word1)}) 16 count_line += 1 17 break # 每一行只比出一个不同位置即可 18 return None 19 20 21 # 在同一个 for 循环中并行遍历两个列表,zip函数是不错的解决方式 22 for (f1_line, f2_line) in zip(f1, f2): # f1本质上是一个序列,它的每个元素就是文件内容中的每一行构成的字符串! 23 if f1_line == f2_line: 24 count_line += 1 25 else: 26 compare(f1_line, f2_line) 27 28 print('两个文件有【%d】处不同' % len(dict_dif_line)) 29 for i in dict_dif_line: 30 print('第 %s 行不一样;' % i, '第一个不同字符的位置 [%s] ' % dict_dif_line.get(i))
题目4
编写一个程序,实现“全部替换”功能,程序实现如图:

代码:
1 # 作业题4 2 # 编写一个程序,实现 "全部替换" 功能 3 file = open('homework3.txt', 'r', encoding='utf-8') # 注意,如果直接用 w 模式打开会直接清空文件!!!! 4 be_changed_word = input('输入要替换的字符:') 5 will_changed_word = input('你想要把它替换成什么?请输入:') 6 content = [] 7 count_list = [] 8 9 10 # 列表内容求和 11 def list_sum(para_list): 12 para_count = 0 13 for i in para_list: 14 para_count = para_count + i 15 return para_count 16 17 18 # 判断与写入函数 —— 判断 以及 用替换后的字符串列表重写文件 19 def judge_function(para_file): 20 judge = input('本文中将有【%d】处要被替换,输入yes替换,输入no取消:' % list_sum(count_list)) 21 if judge == 'yes': 22 para_file.close() 23 para_file = open('homework3.txt', 'w', encoding='utf-8') # 重新用 w 模式打开以重置指针 24 para_file.writelines(content) 25 print('替换完成!') 26 else: 27 print('取消成功!') 28 29 30 # 修改函数 —— 一行一行修改 31 def modify(para_file, para_count_list, para_content): 32 for each_line in para_file: 33 para_count_list.append(each_line.count(be_changed_word)) # 记录每一行被替换的个数 34 each_line = each_line.replace(be_changed_word, will_changed_word) # 修改,注意 replace不能修改原字符串! 35 para_content.append(each_line) # 本题关键:把修改后的一行暂存到列表中,循环完后直接以 w 模式重写 36 37 38 # 函数调用 —— 修改 -> 判断 39 modify(file, count_list, content) 40 judge_function(file) 41 42 # 关闭文件 43 file.close()

浙公网安备 33010602011771号