如何获取列表中的名称数,然后将结果写入文件?

时间:2018-04-05 00:10:19

标签: python

我对python很新,并且遇到了这个(很可能是简单的)问题。我接受了格式的文件。

name_of_sports_team    year_they_won_championship

如,

1991    Minnesota
1992    Toronto
1993    Toronto

它们已经分为嵌套列表[年] [名称]。我的任务是将列表中的所有重复相加,并将其显示在新文件中。

Toronto    2 
Minnesota    1

我的代码如下 -

def write_tab_seperated(n):
    '''
    N is the filename
    '''

    file = open(n, "w")

    # names are always in the second position?
    data[2] = names

    countnames = () 
    # counting the names 
    for x in names:
    # make sure they are all the same    
    x = str(name).lower()
        # add one if it shows. 
        if x in countnames:
            countnames[x] += 1
        else:
            countnames[x] = 1
    # finish writing the file 
    file.close

这很有趣,但我计划从哪里出发:

  • 取文件
  • 分为名单
  • 每次重复加1
  • 以名称(标签)数字格式显示
  • 关闭文件。

感谢任何帮助,并提前感谢您!

3 个答案:

答案 0 :(得分:1)

内置的数据类型非常适合您的collections.Counter用例。

我假设从示例I / O格式化开始,您的数据文件列是制表符分隔的。在问题文本中,它看起来像4个空格 - 如果是这种情况,只需将'\t'更改为' '' '*4

with open('data.tsv') as f:
    lines = (l.strip().split('\t') for l in f.readlines())

一旦你读完了数据,就像把它传递给一个计数器并指定它应该在第二列中的值上创建计数一样简单。

from collections import Counter

c = Counter(x[1] for x in lines)

将它们打印出来以供参考:

for k, v in c.items():
    print('{}\t{}'.format(k, v))

输出:

Minnesota   1
Toronto 2

答案 1 :(得分:0)

python的一大优点是包的数量巨大。为了处理表格数据,我建议使用pandascsv格式:

import pandas as pd

years = list(range(1990, 1994))
names = ['Toronto', 'Minnesota', 'Boston', 'Toronto']

dataframe = pd.DataFrame(data={'years': years, 'names': names})

dataframe.to_csv('path/to/file.csv')

话虽如此,我仍然强烈建议您仔细阅读代码并了解这些事情是如何从头开始完成的。

答案 2 :(得分:0)

根据我的理解,您的解释如下:

#input.txt is the input file with <year><tab><city> data
with open('input.txt','r') as f:
    input_list =[x.strip().split('\t') for x in f]

output_dict = {}
for per_item in input_list:
    if per_item[1] in output_dict:
        output_dict[per_item[1]] += 1
    else:
        output_dict[per_item[1]] = 1

#output file has <city><tab><number of occurence>
file_output = open("output.txt","w")
for per_val in output_dict:
    file_output.write(per_val + "\t" + str(output_dict[per_val]) + "\n")

如果有帮助,请告诉我。