import os
import sys
import shutil
from src.logger import logging
from src.exception import CustomException
from dataclasses import dataclass
## intitialize the Data Ingestion configuration
@dataclass
class DataIngestionconfig:
train_data_path:str=os.path.join('artifacts','train')
test_data_path:str=os.path.join('artifacts','test')
valid_data_path:str=os.path.join('artifacts','valid')
## create the data ingestion class
class DataIngestion:
def __init__(self):
self.ingestion_config=DataIngestionconfig()
def initiate_data_ingestion(self):
logging.info('Data Ingestion method starts')
try:
Train = os.path.join('notebooks\data\Train')
print(Train)
Test = os.path.join('notebooks\data\Test')
def get_filenames(directory_path):
filenames = [os.path.join(directory_path, filename) for filename in os.listdir(directory_path)]
return filenames
train_filenames = get_filenames(Train)
test_filenames = get_filenames(Test)
print(len(train_filenames))
print(len(test_filenames))
# Divide the train_filenames list into train and validation sets
valid_filenames = train_filenames[50:]
train_filenames = train_filenames[:50]
logging.info('Split Data into Train and Validation')
os.makedirs(self.ingestion_config.train_data_path, exist_ok=True)
for filename in train_filenames:
shutil.copy(filename, self.ingestion_config.train_data_path)
os.makedirs(self.ingestion_config.test_data_path, exist_ok=True)
for filename in test_filenames:
shutil.copy(filename, self.ingestion_config.test_data_path)
os.makedirs(self.ingestion_config.valid_data_path, exist_ok=True)
for filename in valid_filenames:
shutil.copy(filename, self.ingestion_config.valid_data_path)
return(
self.ingestion_config.train_data_path,
self.ingestion_config.test_data_path,
self.ingestion_config.valid_data_path
)
except Exception as e:
logging.info('Exception occured at Data Ingestion Stage')
raise CustomException(e,sys)
# if __name__ == '__main__':
# obj = DataIngestion()
# train_path, test_path, valid_path = obj.initiate_data_ingestion()
# print(train_path, test_path, valid_path)
每当我运行这个代码文件时,我都会得到我的参数 笔记本\数据\火车 60 1 文物/火车 工件/测试 文物/有效
import os
import sys
import shutil
from src.logger import logging
from src.exception import CustomException
from src.components.data_ingestion import DataIngestion
if __name__=='__main__':
obj = DataIngestion()
train_path, test_path, valid_path = obj.initiate_data_ingestion()
print(train_path,test_path,valid_path)
但是当我将其用作模块时,我总是会得到这个 回溯(最近一次调用最后一次): 文件“d:\project\BMI\src\pipelines raining_pipeline.py”,第 13 行,位于 train_path、test_path、valid_path = obj.initiate_data_ingestion() TypeError:无法解压不可迭代的 NoneType 对象 我一直被困在这个问题上,有人可以解决这个问题吗
看起来你的函数运行并返回 None 而不是元组。
可能是因为您使用它们的文件夹的路径。 你能调试这个函数并看看哪里失败了吗?