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

  

原文地址:https://www.cnblogs.com/alimy/p/10503242.html

时间: 2024-07-31 07:53:35

[Python]小甲鱼Python视频第029课(文件:一个任务)课后题及参考解答的相关文章

[Python]小甲鱼Python视频第2课(第一个游戏)课后题及参考解答

# -*- coding: utf-8 -*- """ Created on Mon Mar 4 11:19:54 2019 @author: Administrator """ """ 测试题: 0. 什么是BIF? 内置函数,已经写好的API,直接按规矩调用即可,不需要自己写的. 1. 用课堂上小甲鱼教的方法数一数 Python3 提供了多少个 BIF? 在Python命令行下,输入 bif_list_temp

[Python]小甲鱼Python视频第030课(文件系统:介绍一个高大上的东西)课后题及参考解答

# -*- coding: utf-8 -*- """ Created on Fri Mar 8 15:49:32 2019 @author: Administrator """ """ 动动手: 0. 编写一个程序,统计当前目录下每个文件类型的文件数,程序实现如图: 1. 编写一个程序,计算当前文件夹下所有文件的大小,程序实现如图 2. 编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在.如遇到文件

[Python]小甲鱼Python视频第006课(Pyhon之常用操作符)课后题及参考解答

# -*- coding: utf-8 -*- """ Created on Mon Mar 4 23:18:54 2019 @author: fengs """ """ 测试题: 0. Python 的 floor 除法现在使用 “//” 实现,那 3.0 // 2.0 您目测会显示什么内容呢? 1.0 1. a < b < c 事实上是等于? a<b and 2. 不使用 IDLE,你可以轻松说

[Python]小甲鱼Python视频第010课(列表:一个打了激素的数组)课后题及参考解答

# -*- coding: utf-8 -*- """ Created on Tue Mar 5 00:11:43 2019 @author: fengs """ """ 测试题: 0. 列表都可以存放一些什么东西? 各种基础数据类型,字符串,列表等等 1. 向列表增加元素有哪些方法? append insert extend 2. append() 方法和 extend() 方法都是向列表的末尾增加元素,请问他们有

[Python]小甲鱼Python视频第011课(列表:一个打了激素的数组2)课后题及参考解答

# -*- coding: utf-8 -*- """ Created on Tue Mar 5 22:28:59 2019 @author: fengs """ """ 测试题: 0. 下边的列表分片操作会打印什么内容? >>> list1 = [1, 3, 2, 9, 7, 8] >>> list1[2:5] 打印: [2,9,7] 1. 请问 list1[0] 和 list1

[Python]小甲鱼Python视频第012课(列表:一个打了激素的数组3)课后题及参考解答

# -*- coding: utf-8 -*- """ Created on Tue Mar 5 22:43:25 2019 @author: fengs """ """ 测试题: 0. 注意,这道题跟上节课的那道题有点儿不同,回答完请上机实验或参考答案. >>> old = [1, 2, 3, 4, 5] >>> new = old >>> old = [6]

[Python]小甲鱼Python视频第013课(元组:戴上了枷锁的列表)课后题及参考解答

# -*- coding: utf-8 -*- """ Created on Tue Mar 5 23:05:40 2019 @author: fengs """ """ 测试题: 0. 请用一句话描述什么是列表?再用一句话描述什么是元组? 列表:有序且可变的数据集合 元组:有序且不可变的数据集合 1. 什么情况下你需要使用元组而不是列表? 数据已经确定无需修改 2. 当元组和列表掉下水,你会救谁? ...... 3

[Python]小甲鱼Python视频第038课(类和对象:继承 )课后题及参考解答

# -*- coding: utf-8 -*- """ Created on Tue Mar 12 22:35:13 2019 @author: fengs """ """ 测试题: 0. 继承机制给程序猿带来最明显的好处是? 提高代码复用,在不修改其他内容的情况下,只修改需要修改的方法或属性实现 1.如果按以下方式重写魔法方法 __init__,结果会怎样? class MyClass: def __init__(

[Python]小甲鱼Python视频第040课(类和对象:一些相关的BIF )课后题及参考解答

# -*- coding: utf-8 -*- """ Created on Tue Mar 12 23:36:51 2019 @author: fengs """ """ 0. 如何判断一个类是否为另一个类的子类? issubclass(A,B) A是B的子类就返回True 1. 如何判断对象 a 是否为 类 A 的实例对象? isinstance(a,A) 2. 如何优雅地避免访问对象不存在的属性(不产生异常)?