我认为这是一个相对简单的问题,但我是初学者并遇到麻烦。我必须将文本文件中的信息读入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]
如果我打印a[0]
,a[1]
和a[2]
,则上述代码中的分别得到1
,452
和3.9
。< / p>
如何反复执行此操作并将结果存储到数组中?
答案 0 :(得分:2)
您确实拥有CSV样式的文件,因此请使用csv
module:
import csv
results = []
with open('ratings.txt', 'rb') as f:
reader = csv.reader(f, delimiter='|')
for row in reader:
results.append(row)
你可以根据需要增加它;将第二列和第三列附加到单独的列表,将它们转换为int
和float()
,例如:
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("|")
答案 1 :(得分: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)