我对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
这很有趣,但我计划从哪里出发:
感谢任何帮助,并提前感谢您!
答案 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的一大优点是包的数量巨大。为了处理表格数据,我建议使用pandas
和csv
格式:
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")
如果有帮助,请告诉我。