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

# -*- coding: utf-8 -*-
"""
Created on Fri Mar  8 15:49:32 2019

@author: Administrator
"""

"""

动动手:
0. 编写一个程序,统计当前目录下每个文件类型的文件数,程序实现如图:
1. 编写一个程序,计算当前文件夹下所有文件的大小,程序实现如图
2. 编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索,程序实现如图
3. 编写一个程序,用户输入开始搜索的路径,查找该路径下(包含子文件夹内)所有的视频格式文件(要求查找mp4 rmvb, avi的格式即可),并把创建一个文件(vedioList.txt)存放所有找到的文件的路径,程序实现如图:
4. 编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符),程序实现如图:

"""

import os

#动动手0
def count_file_format_num():
    file_folder = "F:\\drink_c_02010121\\test9";
    result_dict = dict();

    result_dict[‘无后缀名文件‘] = 0
    result_dict[‘文件夹‘] = 0

    filelist = os.listdir(file_folder);
    for each in filelist:
        each_full_name = file_folder+‘\\‘+each
        if os.path.isfile(each_full_name):
            if ‘.‘ in each:
                file_name = each.split(‘.‘);
                if file_name[-1] in result_dict.keys():
                    result_dict[file_name[-1]] += 1;
                else:
                    result_dict[file_name[-1]] = 1;
            else:
                result_dict[‘无后缀名文件‘] +=1;
        else:
            result_dict[‘文件夹‘] +=1;

    print(‘ [%s] 中共有[%d]类文件‘ % (file_folder,len(result_dict.keys())))
    for key in result_dict.keys():
        print("该文件夹下共有类型为【%s】的文件【%d】个" % (‘.‘+key,result_dict[key]))

#动动手1
def get_file_size():
    file_folder = "F:\\drink_c_02010121\\test9\\";
    result_dict = dict();
    filelist = os.listdir(file_folder);

    for each in filelist:
        each_file_full_name = file_folder + os.sep + each;
        result_dict[each] = os.path.getsize(each_file_full_name)

    for key in result_dict.keys():
        print(‘%s 【%dBytes】‘ % (key,result_dict[key]));

#动动手2:
def find_file_in_dir(folder_path,target_file_name):
    filelist = os.listdir(folder_path)
    for each in filelist:
        #each_full_name = folder_path +‘\\‘+ each
        each_full_name = folder_path + os.sep + each;
        if each == target_file_name and os.path.isfile(each_full_name):
            print(each_full_name)
        if os.path.isdir(each_full_name):
            find_file_in_dir(each_full_name,target_file_name)

#folder_path = input(‘请输入待查找的初始目录:‘)
#target_file_name = input(‘请输入需要查找的目标文件:‘)
#find_file_in_dir(folder_path,target_file_name)    

#动动手3
#非递归方式,只能到本层和下一层
def get_spec_file_num():
    file_folder = "F:\\drink_c_02010121\\test9"
    result_list = list();
    filelist = os.listdir(file_folder)

    valid_suffix = [‘rar‘,‘h‘];

    for each in filelist:
        if os.path.isdir(file_folder+‘\\‘+each):
            sub_file_folder = file_folder +‘\\‘ + each;
            sub_file_list = os.listdir(sub_file_folder)
            for sub_each in sub_file_list:
                filename = sub_each.split(‘.‘);
                if len(filename) >=2 and filename[-1] in valid_suffix:
                    result_list.append(sub_file_folder+‘\\‘+sub_each);
        else:
            filename = each.split(‘.‘);
            if len(filename) >= 2 and filename[-1] in valid_suffix:
                result_list.append(file_folder+‘\\‘+each);

    f_out = open(‘file_list.txt‘,‘w‘);

    for each in result_list:
        f_out.writelines(each+‘\n‘);
    f_out.close();

#递归方式,递归遍历子文件夹
result_list = list()
valid_suffix = [‘rar‘,‘h‘];
def get_spec_file_num_res( folder_path ):
    global result_list
    global valid_suffix

    filelist = os.listdir(folder_path)
    for each in filelist:
        if os.path.isdir(folder_path+‘\\‘+each):
            get_spec_file_num_res(folder_path+‘\\‘+each);
        else:
            filename = each.split(‘.‘);
            if len(filename) >= 2 and filename[-1] in valid_suffix:
                result_list.append(folder_path+‘\\‘+each);

#动动手4:
#0.遍历文件夹获得以.txt结尾的文件
#1.获取.txt文件的内容,获取关键字的存在与否的信息并打印出来

def get_key_word_info_of_txt_file( folder_path,key_word):

    file_list = os.listdir(folder_path);
    for each in file_list:
        each_full_name = folder_path + ‘\\‘ + each
        if os.path.isdir(each_full_name):
            get_key_word_info_of_txt_file(each_full_name,key_word)
        elif each.endswith(‘.txt‘) and os.path.isfile(each_full_name):
            file_obj = open(each_full_name,‘r‘)
            file_valid = 0;
            lines_count = 0;
            for each_line in file_obj:
                lines_count += 1;
                locs = [];
                #lines = [];
                str_count = each_line.count(key_word);
                index = 0;
                while str_count!=0:
                    index = each_line.find(key_word,index)
                    locs.append(index);
                    index = index + 1;
                    str_count -= 1;
                if len(locs)!=0:
                    file_valid = 1 if file_valid == 0 else 2;
                    if file_valid == 1:
                        print(‘文件【%s】中出现关键字【%s】:‘ % (each_full_name,key_word))
                    print(‘关键字【%s】出现在 %d 行,第%s 个位置‘ %(key_word,lines_count,locs));
            file_obj.close()

get_key_word_info_of_txt_file( ‘C:\\Users\\fengs\Desktop\\SVN_TEST\\Python\\小甲鱼课后题\\测试文件夹‘,‘1‘)    

#count_file_format_num()
#get_file_size()

#get_spec_file_num_res(‘F:\\drink_c_02010121\\test9‘)
#for each in result_list:
#    print(each)

"""
需要注意的问题:
1. 目录分隔符可以用python提供的 os.sep 来代替,以适应不同的操作系统
2. 我的代码都是用的绝对路径,所以不存在切换目录的问题
3. 若要用相对路径,相关的常量:
    os.curdir   -----> 当前目录
    os.sep      -----> 目录分隔符
    os.chdir()  -----> 切换工作目录
    os.pardir   -----> 当前工作目录的上一层目录
    os.getcwd() -----> 当前工作目录的绝对路径

"""

  

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

时间: 2024-10-28 10:52:32

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

[Python]小甲鱼Python视频第009课(了不起的分支和循环3)课后题及参考解答

# -*- coding: utf-8 -*- """ Created on Mon Mar 4 23:47:51 2019 @author: fengs """ """ 测试题: 0. 下面的循环会打印多少次"I Love FishC"? for i in range(0, 10, 2): print('I Love FishC') 0 2 4 6 8 5次 1.下面的循环会打印多少次"

[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视频第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. 如何优雅地避免访问对象不存在的属性(不产生异常)?