1. 程式人生 > >[Python]小甲魚Python視頻第029課(文件:一個任務)課後題及參考解答

[Python]小甲魚Python視頻第029課(文件:一個任務)課後題及參考解答

== adl out 解答 print range ali and 字符

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

  

[Python]小甲魚Python視頻第029課(文件:一個任務)課後題及參考解答