zoukankan      html  css  js  c++  java
  • [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+'
    ');
        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()
        
        
        
        
        
        
    

      

    ~不再更新,都不让我写公式,博客园太拉胯了
  • 相关阅读:
    文件系统
    MySQL中添加唯一约束和联合唯一约束
    Ubuntu(Debian)的aptitude与apt-get的区别和联系
    透明与Z序示例
    Qt Quick分组属性案例
    TextView 设置超过几行后显示省略号
    ionic list item-radio checked
    webkit的基本应用
    信号槽操作案例
    报错:tr was not declared in this scope
  • 原文地址:https://www.cnblogs.com/alimy/p/10503242.html
Copyright © 2011-2022 走看看