从另一个 .py 文件导入变量
Import variables from another .py file
我正在学习 python 编程,但我被困在一些可能非常基础但无法解决的问题上。
我的问题是:我在目录中有一个名为“Downloading_The_Data”的 .py 文件。该文件包含一些变量,如“HOUSING_PATH”等。现在,我在同一目录中有另一个 .py 文件,我想将另一个文件导入其中。我只是写了“import DOWNLOADING_THE_DATA”,一切正常,除非我尝试使用似乎未导入的变量“HOUSING_PATH”。代码:
“DOWNLOADING_THE_DATA”文件:
import os
import tarfile
import urllib
DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml/master/"
HOUSING_PATH = os.path.join("datasets" , "housing")
HOUSING_URL = DOWNLOAD_ROOT + "datasets/housing/housing.tgz"
def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):
if not os.path.isdir(housing_path):
os.makedirs(housing_path)
tgz_path = os.path.join(housing_path, "housing.tgz")
urllib.request.urlretrieve(housing_url, tgz_path)
housing_tgz = tarfile.open(tgz_path)
housing_tgz.extractall(path=housing_path)
housing_tgz.close()
新的 python 文件是:
import pandas as pd
import Downloading_The_Data
def load_housing_data(housing_path=HOUSING_PATH):
csv_path = os.path.join(housing_path , "housing.csv")
return pd.read_csv(csv_path)
错误是:NameError: name 'HOUSING_PATH' is not defined
我想我可以只导入 'DOWNLOADING_THE_DATA' 文件,所有在其中声明的变量都会被导入,这样我就可以使用它了。因此,我的问题简单明了:哪里出了问题,我该如何解决?
编辑:只是一个免责声明:我知道我可以在一个文件中使用所有内容,只需调用 pandas 和所有内容并将 csv 加载到同一个笔记本中,但这是我正在做的练习我。我知道有一天我需要导入其他文件及其变量和东西,所以我只是想从头开始做。
它就像所有其他 Python 模块一样。
def load_housing_data(housing_path=Downloading_The_Data.HOUSING_PATH):
如果你真的讨厌所有的打字,你可以这样做:
from Downloading_The_Data import *
您应该像这样使用另一个 python 文件中的任何定义:
import module
module.variable = 5
module.class()
module.function()
或者您可以这样做:
from module import variable, class, function
variable = 5
class()
function()
from module import *
不是好的做法。
如果你不喜欢打字,你可以给另一个名字:
from module import variable as var
var = 5
我正在学习 python 编程,但我被困在一些可能非常基础但无法解决的问题上。 我的问题是:我在目录中有一个名为“Downloading_The_Data”的 .py 文件。该文件包含一些变量,如“HOUSING_PATH”等。现在,我在同一目录中有另一个 .py 文件,我想将另一个文件导入其中。我只是写了“import DOWNLOADING_THE_DATA”,一切正常,除非我尝试使用似乎未导入的变量“HOUSING_PATH”。代码:
“DOWNLOADING_THE_DATA”文件:
import os
import tarfile
import urllib
DOWNLOAD_ROOT = "https://raw.githubusercontent.com/ageron/handson-ml/master/"
HOUSING_PATH = os.path.join("datasets" , "housing")
HOUSING_URL = DOWNLOAD_ROOT + "datasets/housing/housing.tgz"
def fetch_housing_data(housing_url=HOUSING_URL, housing_path=HOUSING_PATH):
if not os.path.isdir(housing_path):
os.makedirs(housing_path)
tgz_path = os.path.join(housing_path, "housing.tgz")
urllib.request.urlretrieve(housing_url, tgz_path)
housing_tgz = tarfile.open(tgz_path)
housing_tgz.extractall(path=housing_path)
housing_tgz.close()
新的 python 文件是:
import pandas as pd
import Downloading_The_Data
def load_housing_data(housing_path=HOUSING_PATH):
csv_path = os.path.join(housing_path , "housing.csv")
return pd.read_csv(csv_path)
错误是:NameError: name 'HOUSING_PATH' is not defined
我想我可以只导入 'DOWNLOADING_THE_DATA' 文件,所有在其中声明的变量都会被导入,这样我就可以使用它了。因此,我的问题简单明了:哪里出了问题,我该如何解决?
编辑:只是一个免责声明:我知道我可以在一个文件中使用所有内容,只需调用 pandas 和所有内容并将 csv 加载到同一个笔记本中,但这是我正在做的练习我。我知道有一天我需要导入其他文件及其变量和东西,所以我只是想从头开始做。
它就像所有其他 Python 模块一样。
def load_housing_data(housing_path=Downloading_The_Data.HOUSING_PATH):
如果你真的讨厌所有的打字,你可以这样做:
from Downloading_The_Data import *
您应该像这样使用另一个 python 文件中的任何定义:
import module
module.variable = 5
module.class()
module.function()
或者您可以这样做:
from module import variable, class, function
variable = 5
class()
function()
from module import *
不是好的做法。
如果你不喜欢打字,你可以给另一个名字:
from module import variable as var
var = 5