提取数据csv文件并在python中写入另一个文件

时间:2016-11-11 13:47:26

标签: python file csv

我必须编写一个Python应用程序来读取CSV输入文件(appsUsage.csv)并生成一个输出文件,计算每个用户的应用程序使用频率。输入文件的第一列包含用户标识(user_id),第二列包含应用程序的名称(app_name)。在appsUsage.csv中,我必须根据个人用户计算应用程序使用频率以生成app_Rank,并使用以下列转换为名为appsIndividualUsage.csv的新数据集:user_id; APP_NAME; app_Rank。

例如,如果appsUsage.csv有以下事件

a  facebook
a  facebook
a  linkedin
b  google
b  yahoo
b  yahoo

然后appsIndividualUsage.csv将是:

a  facebook  2;
a  linkedin  1;
b  google  1;
b  yahoo  2;

这是我正在努力解决的代码:

import csv 
with open("C:\\Users\\anne\\Desktop\\appsUsage.csv", mode='r') as f_in,
open("C:\\Users\\anne\\Desktop\\appsIndividualUsage.csv", mode='w', newline='')
as f_out:
        f_reader = csv.reader(f_in, dialect=csv.excel_tab)
        f_writer = csv.writer(f_out, dialect=csv.excel_tab)
         for line in reader:
             if line is equal then write it in writer and add a row of frequency

我完全不知道如何编写代码的最后一行。

1 个答案:

答案 0 :(得分:0)

Python为此提供了Counter()。它是一个像对象的字典,可以用来计算添加到它的键。在这种情况下,字典的键是用户名和应用程序的组合。

首先读取输入CSV文件中的所有条目并计算它们。然后将排序后的计数写入输出CSV文件,如下所示:

from collections import Counter    
import csv 

usage_counts = Counter()

with open('appsUsage.csv') as f_in:
    f_reader = csv.reader(f_in, dialect=csv.excel_tab)

    for user, application in f_reader:
        usage_counts[(user, application)] += 1

with open("appsIndividualUsage.csv", mode='w', newline='') as f_out:
    f_writer = csv.writer(f_out, dialect=csv.excel_tab)

    for (user, application), count in sorted(usage_counts.items(), key=lambda x: (x[0], x[1])):
        f_writer.writerow([user, application, count])

这会给你一个CSV文件,如下所示:

a   facebook    2
a   linkedin    1
b   google  1
b   yahoo   2

如果您不允许使用Counter(),则需要使用普通字典,并将1添加到任何现有密钥。