0

我认为这是一个相对简单的问题,但我是初学者并且遇到了麻烦。我必须将文本文件中的信息读入 python 中的两个列表。

这是文本文件的示例,它被称为“ratings.txt”,三列是movieId|numberofRatings|averageRatings。

1|452|3.9
2|131|3.2
3|90|3
4|209|3.6
...
...
1321|2|2.5
...
...
1685|0|-nan
1686|0|-nan

我需要将第二列和第三列数字读入两个单独的数组。第二列数字需要读入列表 numRatings。第三列需要读入列表avgRatings。文本文件从电影 1 到 1686

所以numRatings需要[452,131,90,....0,0]avgRating需要[3.9,3.2,3,....-nan,-nan]

我想我必须创建列表,然后创建循环来读取文本文件并将这些数字存储在数组中。

到目前为止,这是我的代码

f = open("ratings.txt") #opens the text file
line = f.readline() #reads in one line of the file
a = line.split("|") #splits the line of the file, for example line 1 looks like [1, 452, 3.9]

在上面的代码中,如果我 print ,a[0]我分别得到、a[1]和。a[2]14523.9

如何一遍又一遍地执行此操作并将结果存储到数组中?

4

2 回答 2

2

您确实有一个 CSV 样式的文件,因此请使用该csv模块

import csv

results = []
with open('ratings.txt', 'rb') as f:
    reader = csv.reader(f, delimiter='|')
    for row in reader:
        results.append(row)

您可以根据需要增加它;将第二列和第三列附加到单独的列表中,将它们转换为ints 和float()s,例如:

numRatings = []
avgRating = []
with open('ratings.txt', 'rb') as f:
    reader = csv.reader(f, delimiter='|')
    for row in reader:
        numRatings.append(int(row[1]))
        avgRating.append(float(row[2]))

如果这不是CSV 样式的文件,您仍然会使用循环;您将直接在文件对象上循环:

with open('ratings.txt', 'rb') as f:
    for line in f:
        a = line.strip().split("|")
于 2013-04-17T19:59:14.507 回答
0

像这样的东西:

In [56]: with open("abc") as f:
    numRatings=[]
    avgRating=[]
    for line in f:
        f,s,t=map(float,line.split("|"))
        numRatings.append(s)
        avgRating.append(t)
   ....:         

In [57]: numRatings
Out[57]: [452.0, 131.0, 90.0, 209.0]

In [58]: avgRating
Out[58]: [3.9, 3.2, 3.0, 3.6]

或者 :

In [68]: with open("abc") as f:
    z=zip(*(map(float,line.split("|")) for line in f))
    numRatings=z[1]
    avgRating=z[2]
   ....:     

In [69]: numRatings
Out[69]: (452.0, 131.0, 90.0, 209.0)

In [70]: avgRating
Out[70]: (3.9, 3.2, 3.0, 3.6)
于 2013-04-17T20:00:20.207 回答