读书人

python的一个简单有关问题

发布时间: 2012-03-18 13:55:39 作者: rapoo

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=...)

Python code
# 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]))
[解决办法]
Python code
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



探讨

Python code
list = [1,2,3,4,4,1,2,2 ]

for i in set(list):
print i,list.count(i)

[解决办法]
Python code
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] 

读书人网 >perl python

热点推荐