【小甲鱼】Python课后作业 30课 文件系统(2)

第30课

30_0.py

#0.编写一个程序,统计当前目录下每个文件类型的文件数

import os

all_file = os.listdir(os.curdir)
type_dict  = dict()

for each_file in all_file:#遍历all_file
    if os.path.isdir(each_file):
        type_dict.setdefault('文件夹',0)  #
        type_dict['文件夹'] += 1 #计数,添加到type_dict中
    else:
        ext = os.path.splitext(each_file)[1]
        type_dict.setdefault(ext,0)
        type_dict[ext]  += 1


for each_type in type_dict.keys():
    print('该文件夹下共有类型为【%s】的文件%d个'%(each_type,type_dict[each_type]))

        

在这里插入图片描述

30_1.py

#1.编写一个程序,计算当前文件夹下所有文件的大小

import os

def get_size(file_name):
    all_files = os.listdir(file_name)
    file_dict = dict()
   
    for each_file in all_files:
        if os.path.isfile(each_file): #isfile 判断是否是文件
            file_size = os.path.getsize(each_file) #获取文件大小
            file_dict[each_file] = file_size  #添加到字典里

    for each in file_dict.items():
        print('%s【%dBytes】'%(each[0],each[1]))


file_name = input('请输入文件路径:')
get_size(file_name)

【小甲鱼】Python课后作业 30课 文件系统(2)_第1张图片

30_2.py

#2.编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索

import os
def find_file(dir_name,file_name):
    os.chdir(dir_name)

    for each_file in os.listdir(os.curdir):
       
        if each_file == file_name:
            print(os.getcwd()+os.sep + each_file ) #os.sep使程序更标准

        if os.path.isdir(each_file):
            find_file(each_file,file_name) #递归调用
            os.chdir(os.pardir) #递归调用后切记返回上一层目录
            
    



dir_name = input('请输入待查找的初始目录:')
file_name = input('请输入需要查找的目标文件:')
find_file(dir_name,file_name)

在这里插入图片描述

30_3.py

#3.用户输入开始搜索的路径,查找该路径下(包含子文件夹内)所有的视频格式文件要求查找mp4,rmvb,avi格式的即可,并创建一个文件夹(vedioList.txt)存放所有

#找到的文件的路径。

import os
def find_file(dir_name,file_name):
    os.chdir(dir_name)

    for each_file in os.listdir(os.curdir):
        ext = os.path.splitext(each_file)[1]
        if ext in file_name:
            vedio_list.append(os.getcwd()+os.sep + each_file +os.linesep)
              


        if os.path.isdir(each_file):
            find_file(each_file,file_name) #递归调用
            os.chdir(os.pardir) #递归调用后切记返回上一层目录

dir_name = input('请输入待查找的初始目录:')
program_dir = os.getcwd()

file_name ['.mp4','.rmvb','.avi']

vedio_list = []

find_file(dir_name,file_name)

f = open(program_dir + os.sep + 'vedioList.txt','w')
f.writelines(vedio_list)
f.close()

&&因为我没视频文件,就没有试着运行完整。在这里插入图片描述

30_4.py

4.编写一个程序,用户输入关键字,查找当前文件夹内(包括子文件夹)所有含有该关键字的的文本文档(.txt),要求显示该文件所在位置及关键字在文件中的具体位置(第几行第几个字符)

import os

def print_pos(key_dict):
    keys = key_dict.keys()
    keys = sorted(keys) #字典是无序的,进行排序
    for each_key in keys:
        print('关键字出现在第%s行,第%s个位置。'%(each_key,str(key_dict[each_key])))



def pos_in_line(line,key): #查找key在这一行的位置pos
    pos = []
    begin = line.find(key)
    while begin != 1:
          pos.append(begin + 1) #用户是从1开始
          begin = line.find(key,begin +1) #从下个位置继续查找
    return pos
              
def search_in_file(file_name,key): #查找key在txt文件中的行数和具体位置
    f = open(file_name)
    count = 0 #记录行数
    key_dict = dict() #字典,用户存放key所在具体行数对应具体位置

    for each_line in f:
        count += 1
        if key in each_line:
            pos = pos_in_line(each_line,key) #key在每一行对应的位置
            key_dict[count] = pos

        f.close()
    return key_dict

def search_files(key,detail):
    all_files = os.walk(os.getcwd())
    txt_file = []

    for i in all_files:
        for each_file in i[2]:  #提取后缀‘txt’
            if os.path.splitext(each_file)[1] == '.txt':  #根据后缀判断是否文本文件
                each_file = os.path.join(i[0],each_file) #路径名
                txt_file.append(each_file)

    for each_txt_file in txt_file:
        key_dict = search_in_file(each_txt_file,key)
        if key_dict:
            print('======================================================')
            print('在文件【%s】中找到关键字【%s】'%(each_txt_file,key))
            if detail in ['YES','yes','Yes']:
                print_pos(key_dict)

key = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
detail = input('请问是否需要打印关键字【%s】在文件中的具体位置(Yes/No):'%key)
search_files(key,detail)

你可能感兴趣的:(编程语言)