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()
        
        
        
        
        
        
    

      

    ~不再更新,都不让我写公式,博客园太拉胯了
  • 相关阅读:
    hibernate_0100_HelloWorld
    MYSQL子查询的五种形式
    JSF是什么?它与Struts是什么关系?
    nop指令的作用
    htmlparser实现从网页上抓取数据(收集)
    The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the
    FCKeditor 在JSP上的完全安装
    Java遍历文件夹的2种方法
    充电电池和充电时间说明
    吃知了有什么好处
  • 原文地址:https://www.cnblogs.com/alimy/p/10503242.html
Copyright © 2011-2022 走看看