【自然语言处理概述】“海量”文件遍历
作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资源建设专家委员会(TIPCC)志愿者,以及编程爱好者,期待和大家一起学习,一起进步~
.
博客主页:ぃ灵彧が的学习日志
.
本文专栏:人工智能
.
专栏寄语:若你决定灿烂,山无遮,海无拦
.
文章目录
- 【自然语言处理概述】“海量”文件遍历
- 一、前沿
- (一)、任务描述
- (二)、环境配置
- 二、代码部分
- (一)、数据准备
- (二)、实现“海量”文件的类型与存储空间统计
- (三)、小结
- 三、总结
一、前沿
(一)、任务描述
在处理自然语言处理领域的任务时,有些新闻数据集中每条数据都是一个单独的文件。对海量数据文件进行空间占用、类型等分析十分必要,可加深用户对数据的了解,进而在处理数据时合理分配资源。
(二)、环境配置
“海量”文件遍历旨在对文件夹下的大规模数据进行数据类型及占用存储空间的统计。本次实验平台为百度AI Studio,Python版本为Python3.7,下面介绍如何通过Python编程方式实现“海量”文件的遍历。
二、代码部分
(一)、数据准备
为模拟“海量”文件,首先需要准备一个包含有大规模文件的数据包,然后再搞数据包上进行后续处理。为方便演示,我们使用自然语言处理领域中开源的网络数据集:新闻文本数据集,进行后续试验。
引用的数据集为压缩包格式(*.zip),因此需要将其解压至当前的工作空间中,为实现自动解压,提供解压下列函数unzip_data(src_path,target_path),参数为待解压文件与将要解压到的文件夹名称,调用定义好的解压函数,分别将两个数据集进行解压。
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')
(二)、实现“海量”文件的类型与存储空间统计
通过给定目录,统计所有的不同子文件类型及占用存储空间的大小。为了实现代码的可复用及模块化,首先,定义一个专门用于实现类型与存储空间统计的函数:
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)
调用上述函数实现,对步骤1中的文件进行统计:
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)))
输出结果如下图所示:
(三)、小结
至此,已经实现了如何动手编写一个Python小程序,统计路径下文件的类型及其占用空间的大小,这是一个非常实用的小技巧,可以帮助研究者快速实现文件的信息对处理这些文件数据所需的资源进行合理规划、调配。
三、总结
本系列文章内容为根据清华社出版的《自然语言处理实践》所作的相关笔记和感悟,其中代码均为基于百度飞桨开发,若有任何侵权和不妥之处,请私信于我,定积极配合处理,看到必回!!!
最后,引用本次活动的一句话,来作为文章的结语~( ̄▽ ̄~)~:
【学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。】
ps:更多精彩内容还请进入本文专栏:人工智能,进行查看,欢迎大家支持与指教啊~( ̄▽ ̄~)~