IT入门小白 2024-06-17 20:17 采纳率: 28.9%
浏览 4

数据预处理之后,将数据保存到文件中时报错:找不到文件名,如何解决?

数据预处理之后,将数据保存到文件中时报错:找不到文件名。
代码如下:

from data_loader import load_kg, load_ratings, data_split, get_records
from tqdm import tqdm
import numpy as np


def get_ripple_set(train_dict, kg_dict, H, size):

    np.random.seed(255)

    ripple_set_dict = {user: [] for user in train_dict}

    for u in tqdm(train_dict):

        next_e_list = train_dict[u]
        replace = len(train_dict[u]) < size
        indices = np.random.choice(len(train_dict[u]), size, replace=replace)
        ripple_set_dict[u].append([train_dict[u][i] for i in indices])
        for h in range(H):
            h_head_list = []
            h_relation_list = []
            h_tail_list = []
            for head in next_e_list:
                if head not in kg_dict:
                    continue
                for rt in kg_dict[head]:
                    relation = rt[0]
                    tail = rt[1]
                    h_head_list.append(head)
                    h_relation_list.append(relation)
                    h_tail_list.append(tail)

            if len(h_head_list) == 0:
                h_head_list = ripple_set_dict[u][-1][0]
                h_relation_list = ripple_set_dict[u][-1][1]
                h_tail_list = ripple_set_dict[u][-1][0]
            else:
                replace = len(h_head_list) < size
                indices = np.random.choice(len(h_head_list), size, replace=replace)
                h_head_list = [h_head_list[i] for i in indices]
                h_relation_list = [h_relation_list[i] for i in indices]
                h_tail_list = [h_tail_list[i] for i in indices]

            ripple_set_dict[u].append((h_head_list, h_relation_list, h_tail_list))

            next_e_list = ripple_set_dict[u][-1][2]

    return ripple_set_dict


def get_item_record(item_set, train_records):

    ripple_sets = dict()

    for item in item_set:
        item_ripple_set = {item}
        for items in train_records.values():
            if item in items:
                item_ripple_set.update(items)
        ripple_sets[item] = list(item_ripple_set)

    return ripple_sets


def process(data_set_name):

    data_dir = '../data/' + data_set_name + '/'
    ratings = load_ratings(data_dir)
    item_set = set([i[1] for i in ratings])
    train_set, eval_set, test_set = data_split(ratings)
    user_history_dict = get_records(train_set)
    all_records = user_history_dict.copy()
    all_records.update(get_item_record(item_set, user_history_dict))
    kg_dict, _, _ = load_kg(data_dir)
    for i in range(1, 7):
        ripple_set_dict = get_ripple_set(all_records, kg_dict, 4, 2**i)
        np.save(file='./data/'+data_set_name+'/'+str(2**i) + '_ripple_set_dict.npy', arr=ripple_set_dict)


if __name__ == '__main__':

    # process('job')
    # process('music')
    # process('book')
    # process('ml')
    process('movie')
    process('yelp')

报错截图如下:

img


请大家帮忙解答一下,感谢!

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-17 20:17
    关注

    引自免费微信小程序:皆我百晓生

    从提供的信息来看,错误是因为np.save函数尝试保存数据到一个不存在的目录或文件路径。在Python中,使用np.save时,确保目标文件的路径存在是至关重要的。错误信息表明./data/movie/2_ripple_set_dict.npy这个路径是不存在的。

    为了解决这个问题,你需要在尝试保存数据之前创建相应的目录。在Python中,可以使用os模块中的os.makedirs()函数来创建多级目录。修改process函数,在调用np.save前添加创建目录的代码,如下所示:

    import os
    
    def process(data_set_name):
    
        data_dir = '../data/' + data_set_name + '/'
        # ... 其他代码 ...
    
        for i in range(1, 7):
            ripple_set_dict = get_ripple_set(all_records, kg_dict, 4, 2**i)
            # 创建目录
            os.makedirs('./data/'+data_set_name, exist_ok=True)
            # 然后保存文件
            np.save(file='./data/'+data_set_name+'/'+str(2**i) + '_ripple_set_dict.npy', arr=ripple_set_dict)
    

    这里使用了os.makedirs()函数,并设置了参数exist_ok=True,这意味着如果目录已经存在,则不会抛出异常,这可以防止重复创建已存在的目录导致的错误。

    通过上述修改,你的代码应该能够正确地创建所需的目录并保存数据到指定的文件路径,从而避免FileNotFoundError错误。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月17日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见