我正在使用surprise
软件包和Python 3.6
构建推荐系统。我有一个名为MovieLens的类,可加载数据集并进行一些数据预处理。 os.chdir()
函数在脚本执行时可以正常工作,但是在ipython控制台中执行时会引发错误。
这是我的MovieLens类:
import csv
import sys
import re
from surprise import Dataset
from surprise import Reader
from collections import defaultdict
import numpy as np
#__file__ = 'MovieLens.py'
class MovieLens:
movieID_to_name = {}
name_to_movieID = {}
ratingsPath = '../ml-latest-small/ratings-mine.csv'
moviesPath = '../ml-latest-small/movies-mine.csv'
def loadMovieLensLatestSmall(self):
os.chdir(os.path.dirname(sys.argv[0]))
print(os.getcwd())
ratingsDataset = 0
self.movieID_to_name = {}
self.name_to_movieID = {}
reader = Reader(line_format='user item rating timestamp', sep=',', skip_lines=1)
ratingsDataset = Dataset.load_from_file(self.ratingsPath, reader=reader)
with open(self.moviesPath, newline='', encoding='ISO-8859-1') as csvfile:
movieReader = csv.reader(csvfile)
next(movieReader) #Skip header line
for row in movieReader:
movieID = int(row[0])
movieName = row[1]
self.movieID_to_name[movieID] = movieName
self.name_to_movieID[movieName] = movieID
return ratingsDataset
我的工作目录是:F:\RecSys-Materials\Framework
并且数据集位于以下目录中:F:\RecSys-Materials\ml-latest-small
我的anaconda安装在以下目录中:C:\Users\Samarth\Anaconda3
我查看了sys.argv
参数,它返回了一个空列表。我也尝试使用os.path.dirname(__file__)
,但spyder无法识别__file__
变量。
我了解到os.path.dirname()
必须传递路径。那么,为什么在我执行脚本时可以正常工作?我在这里想念什么?