2017-04-03 10 views
0

ファイルごとに1つのファイル(m.csv)を読み込んで、すべての映画ジャンルの単位ベクトルを作成しています。私は次の行に行く前に、ファイル自体の各行の最後に結果のベクトルを追加したいと思います。ファイルごとにベクトルを1行追加する

1,Four Rooms (1995),Comedy 

追加ベクトルは次のようになります:行は、この映画の情報を持っている場合

:インスタンスの

18,Four Rooms (1995),Comedy, [0,1,0,0,0,0] 

私は次のようにバックvectorを追加する方法についての問題を抱えています:

genres = ['unknown', 'Comedy', 'Crime', 'Documentary', 'Drama', 'Fantasy'] 


movieDict = {} 
with open(path + 'm.csv') as f: 
    temp = '' 
    for line in f: 
     reader = csv.reader(f, delimiter=',') 
     for row in reader: 
      l = row[-1].split('|') 
      vector = [0] * 6 
      for i in range(len(l)): 
       # print ("%s is at index=%s! \n" % (l[i], genres.index(l[i]))) 
       if l[i] in genres: 
        vector[genres.index(l[i])] = 1 
       else: 
        vector[genres.index(l[i])] = 0 
      reader[row] = vector # <<<<<< I am stuck here!! 

何か助けていただければ幸いです。

+0

@ Jean-FrançoisFabreありがとうございました。 'AttributeError: '_csv.reader'オブジェクトに 'append'という属性がありません。それは私がPython 2.7を使用しているからですか? – Kris

+0

申し訳ありません私は 'row.append(vector)'を意味しました –

+1

あなたは読んでいるファイルを変更することはできません。変更された行を新しいファイルに書き込む必要があります。さらに、最後のフィールドにはコンマが含まれているので、引用符で囲む必要があります: '1、Four Rooms(1995)、Comedy、[0,1,0,0,0,0]」' –

答えて

0

ファイルからの読み取りと同時にファイルからの書き込みを試みるとコメントされているため、動作しません。

あなたは(大きなファイルのために可能ではないかもしれません)メモリにすべてのデータを読み、その後、例えばその最初の答えこの

with open(path, 'r+') as f: 
    lines = f.readlines() 
    f.seek(0) 
    f.truncate() 
を行い、この questionを参照してください、元のファイルを切り捨てて、新しい内容を書き込むことができます

代替は、書き込みのために新しいファイルを開き、1つのファイルから1つの行を読み込み、もう1つのファイルに書き込むことです。後で元のファイルを削除し、2番目のファイルの名前を変更することができます。