#python #postgresql #psycopg2
#python #postgresql #psycopg2
Вопрос:
Я новичок в Python, программировании в целом и пытаюсь прочитать файл .dat и вставить данные в таблицу postgres.
Я получаю сообщение об ошибке, и я погуглил, но не смог найти решение. Надеюсь, кто-нибудь сможет указать мне правильное направление.
Таблица рейтингов:
UserID int
MovieID int
Rating float
Ratings.dat:
1::122::5::838985046
1::185::5::838983525
Ниже приведен мой код:
import psycopg2
ratingsfile = open('ml-10M100K/ratings.dat', 'r')
for line in ratingsfile:
items = line.split('::')
for values in items:
curr.execute("INSERT INTO Ratings(UserID, MovieID, Rating)
VALUES (%s, %s, %s)", values)
conn.commit()
ratingsfile.close()
Ошибка:
curr.execute("INSERT INTO Ratings(UserID, MovieID, Rating)
VALUES (%s, %s, %s)", values)
IndexError: string index out of range
Ответ №1:
Вам не нужно выполнять итерации items
. Вместо этого вы можете назначить 3 %s
переменные items[index]
следующим образом:
import psycopg2
ratingsfile = open('ml-10M100K/ratings.dat', 'r')
for line in ratingsfile:
items = line.split('::')
curr.execute("INSERT INTO Ratings(UserID, MovieID, Rating) VALUES (%s, %s, %s)" % (items[0], items[1], items[2]))
conn.commit()
ratingsfile.close()
Это предполагает, что, например, в вашем примере Ratings.dat идентификатор пользователя равен 1 ( items[0]
), идентификатор фильма равен 122 и 185 ( items[1]
), а рейтинг равен 5 ( items[2]
). Доступ к 9-значным целым числам в конце каждой строки можно получить с помощью items[3]
Комментарии:
1. Ага, вот и все! Спасибо!