在Python中尝试将文件中的信息读入两个列表

在Python中尝试将文件中的信息读入两个列表,python,list,file-io,split,readline,Python,List,File Io,Split,Readline,我认为这是一个相对简单的问题,但我是一个初学者,有困难。我必须用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 我需要将第二列和第三列数字读入两个单独的数组。第二列数字需要读

我认为这是一个相对简单的问题,但我是一个初学者,有困难。我必须用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
我需要将第二列和第三列数字读入两个单独的数组。第二列数字需要读入数字列表。第三列需要读入一个列表。文本文件从电影1到1686

因此,
numRatings
需要是
[452131,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]
在上面的代码中,如果我打印
a[0]
a[1]
a[2]
我分别得到
1
452
3.9


如何反复执行此操作并将结果存储到阵列中?

您确实有一个CSV样式的文件,因此请使用:

您可以根据需要对其进行扩充;将第二列和第三列附加到单独的列表中,将它们转换为
int
s和
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("|")
大概是这样的:

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]
或:


@MarkusMeskanen:参见:
float
的脚注6也接受字符串“nan”和带有可选前缀“+”或“-”的“inf”表示非数字(nan)和正或负无穷大。在我问他们lol之前,你回答我的问题。谢谢你提供的信息:)@MarkusMeskanen:它代表:一个数字数据类型值,表示一个未定义或不可表示的值。我不认为这是一个CSV文件,所有数字都用|分隔,如果不是CSV文件,你能解释一下如何编写代码吗?如何将值放入数组中?如果我只使用非CSV代码,我仍然会得到errors@user2292302:这是一个管道分隔文件,只不过是CSV的一种方言。
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)