Python:导入时从另一个文件接收空列表

Python:导入时从另一个文件接收空列表,python,Python,我有一个数据加载器文件(data.py),它用数据加载我的课程列表。它工作正常,因为课程列表中确实加载了我的JSON数据 data.py是:- 导入json 导入操作系统 课程=[] def load_data(): “”“从json文件加载数据。 """ script\u dir=os.path.dirname(\u文件\u) rel_path='json\course.json' abs\u file\u path=os.path.join(script\u dir,rel\u path)

我有一个数据加载器文件(data.py),它用数据加载我的
课程列表。它工作正常,因为课程列表中确实加载了我的JSON数据

data.py是:-

导入json
导入操作系统
课程=[]
def load_data():
“”“从json文件加载数据。
"""
script\u dir=os.path.dirname(\u文件\u)
rel_path='json\course.json'
abs\u file\u path=os.path.join(script\u dir,rel\u path)
打开(abs_文件_路径)作为json_文件:
courses=json.load(json_文件)
印刷(课程)
当我试图在另一个python文件中导入
课程
列表时,我收到的是一个空列表。我把它作为

导入数据
打印(数据、课程)

导入数据时,再次执行文件,但未运行函数。因此,要解决这个问题,您需要在当前文件中运行
load_data()
,以便它填充课程列表。 您的新代码应该如下所示:

import data
data.load_data()
print(data.courses)
然而,你所做的是错误的。您没有在data.py中定义数据。如果多个文件导入了数据怎么办?相反,您只需要返回加载的数据。因此,函数变成:

def load_data():
    """Load the data from the json file.
    """
    script_dir = os.path.dirname(__file__)
    rel_path = 'json\course.json'
    abs_file_path = os.path.join(script_dir, rel_path)
    with open(abs_file_path) as json_file:
        return json.load(json_file)

这也应该是您的整个
data.py
以及导入。现在,您只需从数据导入加载数据
,并随时调用
load\u data()
。我建议将
file\u name
作为一个参数,以便您可以选择每次从何处加载数据。

您需要首先实际加载数据,以便

Import.py

import data
print(data.load_data())
import json
import os
courses = []

def load_data():
    """Load the data from the json file.
    """
    script_dir = os.path.dirname(__file__)
    rel_path = 'json\course.json'
    abs_file_path = os.path.join(script_dir, rel_path)
    with open(abs_file_path) as json_file:
        courses = json.load(json_file)
    return courses

Data.py

import data
print(data.load_data())
import json
import os
courses = []

def load_data():
    """Load the data from the json file.
    """
    script_dir = os.path.dirname(__file__)
    rel_path = 'json\course.json'
    abs_file_path = os.path.join(script_dir, rel_path)
    with open(abs_file_path) as json_file:
        courses = json.load(json_file)
    return courses


您将其定义为空列表。您不会在发布代码的任何地方更改它。为什么你对导入会给你一个空列表感到困惑?@Prune他认为导入会调用
load_data
automaticallyThanks来获得答案,但如果我需要加载的数据非常大,这不是一种坏做法吗?@YashBoura这取决于你想做什么。如果你有足够的记忆,那就去吧。如果没有,则将load_data()转换为生成器,而不是
打印(课程)
您需要
生成一个课程。但既然它已经是json了,我想你对此无能为力。