0

これは比較的簡単な質問だと思いますが、私は初心者で問題があります。Python で、テキスト ファイルから 2 つのリストに情報を読み込む必要があります。

これはテキスト ファイルの例です。「ratings.txt」という名前で、3 つの列は 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

数値の 2 列目と 3 列目を 2 つの別々の配列に読み込む必要があります。数値の 2 列目は、リスト numRatings に読み込む必要があります。3 番目の列は 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]得られます。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)

必要に応じてこれを拡張できます。2 番目と 3 番目の列を別々のリストに追加し、それらを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 に答える