# 海量文件遍历
机器学习往往需要大量的数据来训练模型,因此对数据的处理肯定是不能少的,而数据往往很多,大多数以压缩文件.zip 出现的,所以本篇记录文件遍历的方法
# 一、所需要调用的库
库
库
# 二、具体代码、注释及效果图
import zipfile | |
import os | |
def unzip_data(src_path,target_path): | |
#解压原始数据集,将 src_path 路径下的 zip 压缩包解压到 target_path 目录下 | |
if (not os.path.isdir(target_path)): #os.path.isdir (path) 判断 path 路径是否是一个目录 | |
z = zipfile.ZipFile(src_path,'r') | |
z.extractall(path=target_path) | |
z.close() | |
unzip_data('data/data00001/test_data.zip','data/data00001/test_data') | |
unzip_data('data/data00001/train_data.zip','data/data00001/train_data') |
执行这一段代码后效果如下:
点开这两个文件夹,可以发现压缩文件的内容已经被解压到这两个文件夹里了
下面是通过指定目录,统计所有的不同文件类型及占用内存的代码
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) | |
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))) |
输出结果如下: