百度松果菁英班——机器学习实践一:海量文件遍历

飞桨AI Studio星河社区-人工智能学习与实训社区

🦐在指定目录下显示目录结构

!tree -L 显示级数限制 指定目录

如:

!tree -L 3 ./data/

表示:在目录 ./data/ 下显示目录结构,限制显示到第三级子目录或文件。这个命令通常在命令行环境(即shell)下使用,用于查看目录结构,以便更好地了解目录中包含的文件和子目录。

🦐将指定路径下的ZIP文件解压缩到目标路径下(unzip_data)

import zipfile 
def unzip_data(src_path,target_path):
    # 解压原始数据集,将src_path路径下的zip包解压至target_path目录下
    if(not os.path.isdir(target_path)):     
        z = zipfile.ZipFile(src_path, 'r')
        z.extractall(path=target_path)
        z.close()
​
unzip_data('data/data19638/insects.zip','data/data19638/insects')
unzip_data('data/data55217/Zebra.zip','data/data55217/Zebra')
  • 导入zipfile模块,提供对zip文件的读取和解压缩功能

  • 定义了一个叫unzip_data的函数

    • 参数src_path:指定要解压的zip文件的路径

    • 参数target_path:指定要将解压后的文件放置到的目标路径

    • 函数内部

      • 首先通过os.path.isdir(target_path)检查目标路径是否存在,如果不存在,则创建目标路径

      • 然后使用zipfile.ZipFile(src_path, 'r')打开指定路径下的ZIP文件,使用读模式

      • 调用z.extractall(path=target_path)方法将ZIP文件解压缩到目标路径下

      • 最后使用z.close()关闭ZIP文件对象,释放资源

解压缩后调用tree指令查看结果:

🦐统计给定目录下所有不同文件类型的文件数量以及它们的总内存占用量(get_size_type)

import os
 
"""
通过给定目录,统计所有的不同子文件类型及占用内存
"""
size_dict = {}
type_dict = {}
def get_size_type(path):
    
    files = os.listdir(path)
    for filename in files:
        temp_path = os.path.join(path, filename)
        if os.path.isdir(temp_path):#是文件夹
            # 递归调用函数,实现深度文件名解析
            get_size_type(temp_path)     
        elif os.path.isfile(temp_path):#是文件
            # 获取文件后缀
            type_name=os.path.splitext(temp_path)[1]   
            #无后缀名的文件
            if not type_name:
                type_dict.setdefault("None", 0)
                type_dict["None"] += 1
                size_dict.setdefault("None", 0)
                size_dict["None"] += os.path.getsize(temp_path)
            # 有后缀的文件
            else:
                type_dict.setdefault(type_name, 0)
                type_dict[type_name] += 1
                size_dict.setdefault(type_name, 0)
                # 获取文件大小
                size_dict[type_name] += os.path.getsize(temp_path) 
  • 定义了两个空字典size_dicttype_dict,用于分别记录不同文件类型的内存占用和数量

  • 定义了一个函数get_size_type(path),该函数接受一个参数path,表示要统计的目录路径

    • 使用os.listdir(path)获取指定路径下的所有文件和文件夹列表

    • 遍历列表中的每个文件和文件夹,使用os.path.join(path, filename)构建完整的文件路径

    • 如果是文件夹,则递归调用get_size_type(temp_path)来处理子文件夹

    • 如果是文件,则获取其文件后缀名,并根据是否有后缀名进行处理:

      • 如果没有后缀名,则将其归类为"None"类型,并更新对应的数量和占用内存大小

      • 如果有后缀名,则将其归类到对应的后缀名类型,并更新对应的数量和占用内存大小

统计完成后,size_dicttype_dict分别记录了不同文件类型的总内存占用和数量

🦐应用

path= "data/"
get_size_type(path)
for each_type in type_dict.keys():
    print ("%5s下共有【%5s】的文件【%5d】个,占用内存【%7.2f】MB" %     
            (path,each_type,type_dict[each_type],\
            size_dict[each_type]/(1024*1024)))
print("总文件数:  【%d】"%(sum(type_dict.values())))
print("总内存大小:【%.2f】GB"%(sum(size_dict.values())/(1024**3)))
  • 设置要统计的目录路径

  • 调用get_size_type函数,统计该目录下所有不同文件类型的文件数量以及它们的总内存占用量

  • 使用for循环遍历type_dict字典中的每个键(即文件类型),并打印出文件类型、文件数量以及占用内存大小的信息

  • 通过sum(type_dict.values())统计所有文件的总数,通过sum(size_dict.values())统计所有文件的总内存占用量

  • 将结果打印出来,其中内存大小单位转换为GB

机器学习还有python我接触的有点少,对我来说还是有难度的,如果有问题欢迎大家的指正,欢迎大家和我一起学习百度松果菁英班的机器学习内容,有问题我们随时评论区见~

⭐点赞收藏不迷路~

相关推荐

  1. 机器学习算法春招二三面面经

    2024-04-06 21:28:04       33 阅读
  2. php文件夹

    2024-04-06 21:28:04       58 阅读
  3. 电商“劫”归来

    2024-04-06 21:28:04       47 阅读
  4. 深入探索Redis:如何有效海量数据集

    2024-04-06 21:28:04       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-06 21:28:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-06 21:28:04       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-06 21:28:04       82 阅读
  4. Python语言-面向对象

    2024-04-06 21:28:04       91 阅读

热门阅读

  1. 蓝桥杯算法题:K倍区间

    2024-04-06 21:28:04       43 阅读
  2. 第六章:CSS最佳实践与优化

    2024-04-06 21:28:04       40 阅读
  3. 第十四届蓝桥杯省赛大学B组(C/C++)整数删除

    2024-04-06 21:28:04       48 阅读
  4. 抖音运营技巧2

    2024-04-06 21:28:04       40 阅读
  5. MyBatis plus 详解

    2024-04-06 21:28:04       142 阅读
  6. 谈谈Python中的正则表达式及其用法。

    2024-04-06 21:28:04       40 阅读
  7. 在MacOS上安装Homebrew:初学者指南

    2024-04-06 21:28:04       50 阅读