《零基础入门学习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()

 

posted @ 2021-03-11 17:32  vosoland  阅读(93)  评论(0)    收藏  举报