python的一个简单问题.
刚学python不久,还没有看到如何处理txt文本的章节,现在有个任务,想来半天找来半天找不到如何写。
麻烦高人指点下:
有个txt的文档,里面是1,2,3,4,4,1,2,2 等这些数字,我现在想实现的功能是找出这些数字的频率,按照频率从高到低排序。
上面的例子想得出的结果是:
2 3
1 2
4 2
3 1
[解决办法]
假设文档格式是逗号分开的数字,文档不是太大(能一次读入内存)
打开文件:open
读入: read()
分割字符串:split
计数:dictionary
排序:sorted(list, key=...)
# coding: utf-8def number_count(f): numbers = map(int, open(f).read().split(',')) #假设数字是用","分开的 freqs = {} for n in numbers: freqs[n] = freqs.get(n, 0) + 1 return freqsdef print_result(freqs): for n, f in sorted(freqs.items(), key=lambda i: -i[1]): print "%d\t%d" % (n, f)if __name__=='__main__': import sys print_result(number_count(sys.argv[1]))
[解决办法]
list = [1,2,3,4,4,1,2,2 ]for i in set(list): print i,list.count(i)
[解决办法]
如果文件太大、很多重复的话还是用字典最合适dict;
f = open('test.txt','rt') #每行一个数字
r = {}
for s in f:
s = s.strip() #删除回车
if r.has_key(s):
r[s] += 1
else:
r[s] = 1
for k,v in r.iteritems():
print k,':',v
f = open("data.txt","r")fdata = f.read()f.close()fdata_a = fdata.split(",")fdata_p = {}for char in fdata_a: if not fdata_p.has_key(char): fdata_p[char] = 1 else: fdata_p[char] += 1data_keys = fdata_p.keys()data_values = fdata_p.values()while len(data_values) > 0: ind = data_values.index(max(data_values)) print data_keys[ind],data_values[ind],"\n" del data_keys[ind],data_values[ind]