[Python]小甲鱼Python视频第029课(文件:一个任务)课后题及参考解答
# -*- coding: utf-8 -*- """ Created on Fri Mar 8 14:34:39 2019 @author: Administrator """ """ 动动手: 0. 编写一个程序,接受用户的输入并保存为新的文件,程序实现如图: 1. 编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置,程序实现如图: 2. 编写一个程序,当用户输入文件名和行数(N)后,将该文件的前N行内容打印到屏幕上,程序实现如图: 3. 呃,不得不说我们的用户变得越来越***钻了。要求在上一题的基础上扩展,用户可以随意输入需要显示的行数。(如输入13:21打印第13行到第21行,输入:21打印前21行,输入21:则打印从第21行开始到文件结尾所有内容) 4. 编写一个程序,实现“全部替换”功能,程序实现如图: """ #动动手0 def save_input(): file_name = input('请输入文件名:') file_out = open(file_name,'w') print("请输入【单独输入':w'保存退出】"); while True: input_line = input(); if input_line == ':w': break; else: file_out.writelines(input_line+'\n'); file_out.close(); #动动手1: def CompareFile(): file_in_1_str = input('请输入需要比较的头一个文件名:'); file_in_2_str = input('请输入需要比较的另一个文件名:'); file_in_1_obj = open(file_in_1_str,'r'); file_in_2_obj = open(file_in_2_str,'r'); diff_lines = list(); file_list_1 = list(file_in_1_obj); file_list_2 = list(file_in_2_obj); file_in_1_obj.close(); file_in_2_obj.close(); file_1_lines = len(file_list_1); file_2_lines = len(file_list_2); valid_lines = min(file_1_lines,file_2_lines); for i in range(valid_lines): if file_list_1[i] == file_list_2[i]: continue else: diff_lines.append(i+1) invalid_lines = list(range(valid_lines+1,1+max(file_1_lines,file_2_lines))) diff_lines.extend(invalid_lines); if len(diff_lines) == 0: print('两个文件完全一致'); else: print('两个文件共有【%d】处不同' % len(diff_lines) ) for each in diff_lines: print('第 %d 行不一样' % each) #动动手2. def showNLines(): file_name = input('请输入要打开的文件(C:\\test):') lines = int(input('请输入需要显示该文件前几行:')) #必须输入正整数 f_obj = open(file_name,'r'); file_list_1 = list(f_obj); lines_num = len(file_list_1); f_obj.close() if lines_num<lines: print("文件行数[%d]小于需要显示的行数[%d],默认显示全部行数" %(lines_num,lines)); for each in file_list_1: print(each) else: print('[%s] 的前[%d]行的内容是:' % (file_name,lines)) for i in range(lines): print(file_list_1[i]) #动动手3: def showNLinesPlus(): file_name = input('请输入要打开的文件(C:\\test):') lines_show = input('请输入需要显示的行数【格式如 13:21 或 :21 或 21:】: ').strip(); file_obj = open(file_name,'r') file_lines = file_obj.readlines(); file_lines_num = len(file_lines); file_obj.close() lines_split = lines_show.split(':'); len_str = len(lines_split); print(len_str) print(lines_split) print(lines_show[0]) if lines_show == ':' or len_str == 0: print('%s 的全文是:' % file_name ) for each in file_lines: print(each) elif len_str == 2 and lines_show[0] == ':' : print('%s 从开始到 %d行的内容是:' % ( file_name,int(lines_split[1]) )) for i in range(file_lines_num): #这里要求输入的行数必须大于0小于等于文件的行数 if i < int(lines_split[1]): print(file_lines[i]) elif len_str == 2 and lines_show[-1] == ':' : print('%s 从%d行到末尾的内容是:' % ( file_name,int(lines_split[0]) )) for i in range(file_lines_num): if i >= int(lines_split[0]): print(file_lines[i]) elif len_str == 2 and '' not in lines_split: print('%s 从%d行到%d行的内容是:' % ( file_name, int(lines_split[0]), int(lines_split[1])) ) for i in range(file_lines_num): if i >= int(lines_split[0]) and i < int(lines_split[1]) : print(file_lines[i]) #动动手4 def file_all_replace(): file_name = input("请输入文件名:") old_str = input('请输入需要替换的单词或字符:') new_str = input('请输入新的单词或字符:') file_obj_in = open(file_name,'r'); file_lines_in = file_obj_in.readlines() file_obj_in.close() old_str_num = 0 file_lines_out = [] for each in file_lines_in: old_str_num += each.count(old_str) file_lines_out.append(each.replace(old_str,new_str)) print(file_lines_out) print('文件 %s 中共有 %d 个 %s' % (file_name,old_str_num,old_str) ) print('您确定把所有的【%s】替换成【%s】吗?' % (old_str,new_str)) input_cmd = input('YES / No').strip(); if input_cmd == 'YES' or input_cmd == 'yes': file_obj_out = open(file_name,'w') for each in file_lines_out: file_obj_out.writelines(each) file_obj_out.close() print('替换成功') else: print('未替换成功') #save_input(); #CompareFile(); #showNLines() #showNLinesPlus() #file_all_replace()
~不再更新,都不让我写公式,博客园太拉胯了