插入Postgresql表时,字符串索引超出范围

问题描述 投票:0回答:1

我是python的新手,一般编程,并尝试读取.dat文件并将数据插入postgres表。

我收到了一个错误,我用Google搜索但无法提出解决方案。希望有人能指出我正确的方向。

评级表:

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
python postgresql psycopg2
1个回答
0
投票

你不需要遍历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中,UserID为1(items[0]),MovieID为122和185(items[1]),而Rating为5(items[2])。可以使用items[3]访问每行末尾的9位整数

© www.soinside.com 2019 - 2024. All rights reserved.