(13-2)服装推荐系统:工具类

本文介绍了在项目开发中如何使用utils目录存储通用工具函数,如读取CSV、Parquet、pickle和YAML文件,以及保存数据到不同格式的文件。着重讲解了read_utils.py和write_utils.py中的具体实现方法,以提高代码复用和组织性。
摘要由CSDN通过智能技术生成

12.4  工具类

在一个项目中,"utils"目录通常用于存放通用的工具函数或类。这些工具函数或类可以在整个项目的不同部分被多次使用,以提供一些常见的功能和操作。通常,"utils"目录中的文件包括与数据处理、文件读写、日志记录、异常处理、图像处理、配置读取等相关的工具函数或类。这样的目录结构可以帮助项目保持整洁和组织,使开发人员能够更轻松地复用和管理这些通用工具。

12.4.1  读取文件

编写文件read_utils.py定义一些用于读取文件的函数,这些函数提供了方便的方法来读取各种类型的文件和数据,并将它们转换为适当的数据结构以供进一步处理和分析。文件read_utils.py的主要实现代码如下所示。

def read_csv(file_path, **kargs):
    if len(kargs.keys()) == 3:
        return pd.read_csv(file_path, 
                        converters = kargs['converters'],  
                        usecols = kargs['usecols'],
                        dtype = kargs['dtype'],
                        )
    else:
        return pd.read_csv(file_path)
  

def read_from_parquet(file_path):
    return pd.read_parquet(file_path)

def read_from_pickle(file_path, compression = 'gzip'):
    if compression == '':
        return pd.read_pickle(file_path)
    else:
        return pd.read_pickle(file_path, compression = compression)

    
def read_yaml_file(file_path):     
    with open(file_path, "rb") as yaml_file:
        return yaml.safe_load(yaml_file)   

def read_yaml_key(file_path, key, subkey = None): 
    config = read_yaml_file(file_path)
    value = config[key]

    if subkey != None:
        value = value[subkey]
    return value    

def read_compressed_numpy_array_data(file_path):
    return np.load(file_path)['arr_0']    


def read_object(file_path: str, ) -> object:

    with open(file_path, "rb") as file_obj:
        return dill.load(file_obj)
  1. read_csv(file_path, **kargs):读取csv文件并返回一个Pandas数据帧(DataFrame)。此函数可以接受一些关键字参数,包括converters(转换器函数)、usecols(要读取的列)和dtype(列的数据类型)。
  2. read_from_parquet(file_path): 从Parquet文件中读取数据,并返回一个Pandas数据帧。
  3. read_from_pickle(file_path, compression='gzip'): 从pickle文件中读取数据,并返回一个Pandas数据帧。可以选择使用压缩(gzip)。
  4. read_yaml_file(file_path): 从YAML文件中读取数据,并返回一个字典。
  5. read_yaml_key(file_path, key, subkey=None) :从YAML配置文件中读取指定的键(key)的值,并返回。可以选择读取键的子键(subkey)的值。
  6. read_compressed_numpy_array_data(file_path) :从文件中加载压缩的NumPy数组数据,并返回一个NumPy数组。
  7. read_object(file_path: str) -> object:从文件中加载对象(通过使用dill库进行序列化),并返回该对象。

12.4.2  写入、保存数据

编写文件write_utils.py,定义了一些用于保存数据的函数,这些函数能够将数据保存到不同的文件格式中,如Parquet、pickle、YAML和压缩的NumPy数组。通过这些函数,可以将数据保存到文件以供以后使用或共享。文件write_utils.py的具体实现代码如下所示。

def save_to_parquet(df, file_path, replace = False): 
    if replace:
        if os.path.exists(file_path):
            os.remove(file_path)
    os.makedirs(os.path.dirname(file_path), exist_ok = True)
    df.to_parquet(file_path)

def save_to_pickle(df, file_path, replace = False):
    if replace:
        if os.path.exists(file_path):
            os.remove(file_path)
    os.makedirs(os.path.dirname(file_path), exist_ok = True)
    df.to_pickle(file_path, compression = 'gzip', protocol = 4)

def save_yaml_data(file_path, content, replace = False):  
    if replace:
        if os.path.exists(file_path):
            os.remove(file_path)

    os.makedirs(os.path.dirname(file_path), exist_ok = True)
    with open(file_path, "w") as file:
        yaml.dump(content, file)
    
def save_compressed_numpy_array_data(file_path, array):  
    dir_path = os.path.dirname(file_path)        
    os.makedirs(dir_path, exist_ok = True)
    np.savez_compressed(file_path, array)

def save_object(file_path: str, obj: object) -> None:     
    logging.info("save_object method of main_utils class started.")
    os.makedirs(os.path.dirname(file_path), exist_ok=True)
    with open(file_path, "wb") as file_obj:
        dill.dump(obj, file_obj)
    logging.info("save_object method of main_utils class ended.")
  1. save_to_parquet(df, file_path, replace=False): 将数据帧(DataFrame)保存为Parquet文件。在保存之前,它会检查目录是否存在,如果不存在则会创建目录。可以选择是否替换已存在的文件。
  2. save_to_pickle(df, file_path, replace=False): 将数据帧(DataFrame)保存为pickle文件。在保存之前,它会检查目录是否存在,如果不存在则会创建目录。可以选择是否替换已存在的文件。
  3. save_yaml_data(file_path, content, replace=False): 将内容保存到YAML文件中。在保存之前,它会检查目录是否存在,如果不存在则会创建目录。可以选择是否替换已存在的文件。
  4. save_compressed_numpy_array_data(file_path, array): 将NumPy数组数据保存为压缩文件格式(.npz)。在保存之前,它会检查目录是否存在,如果不存在则会创建目录。
  5. save_object(file_path: str, obj: object) -> None: 将对象保存到文件中(通过使用dill库进行序列化)。在保存之前,它会检查目录是否存在,如果不存在则会创建目录。

未完待续

  • 24
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

感谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值