2015-12-07 3 views
0

Я работаю над проектом с данными (csv), которые я собрал из last.fm. В наборе данных есть четыре столбца, первый - художник, второй альбом, 3-й - имя песни, а четвертый - дата, когда я прокрутил трек до last.fm. Я уже нашел способ подсчета количества вхождений каждого исполнителя, альбома и песни, но я хотел бы добавить эти данные в каждую строку данных, чтобы я мог и с помощью csv-файла, имеющего 7 столбцов. Поэтому в каждой строке я хочу добавить количество раз, когда песня, исполнитель и альбом находятся в наборе данных. Я просто не могу понять, как это сделать. Мне трудно найти нужного исполнителя. Может кто-нибудь помочь?Python: добавление счетчика в файл csv

import csv 
import collections 

artists = collections.Counter() 
album = collections.Counter() 
song = collections.Counter() 
with open('lastfm.csv') as input_file: 
    for row in csv.reader(input_file, delimiter=';'): 
     artists[row[0]] += 1 
     album[row[1]] += 1 
     song[row[2]] += 1 

    for row in input_file: 
     row[4] = artists(row[0]) 
+0

Возможно посмотреть в ['csv.writer'] (https://docs.python.org/3/library/csv.html#csv.writer) – shuttle87

+0

Хорошо, я вижу, как это мне поможет, но как я получу нужные данные из collection.counter в правом ряду (так что я получаю нужный художник в правильном художнике)? – Jorism

+0

Я думаю, что это должно получиться так: 'artist [row [0]]' – shuttle87

ответ

1

Предполагая, что входной файл не огромен, вы можете просто повторить над входным файлом во второй раз и написать строки с подсчетами прилагаемых, например так:

import csv 
import collections 

artists = collections.Counter() 
album = collections.Counter() 
song = collections.Counter() 
with open('lastfm.csv') as input_file: 
    for row in csv.reader(input_file, delimiter=';'): 
     artists[row[0]] += 1 
     album[row[1]] += 1 
     song[row[2]] += 1 


with open('output.csv', 'w') as output_file: 
    writer = csv.writer(output_file, delimiter=';') 
    with open('lastfm.csv', 'r') as input_file: 
     for row in csv.reader(input_file, delimiter=';'): 
      writer.writerow(row + [song[row[2]], artists[row[0]], album[row[1]]]) 
+0

Wow именно это я и искал. Большое спасибо!! – Jorism

Смежные вопросы