python查询排序问题,求助

home目录下有个文件a里面5行内容:
小老虎
小老虎像大老虎
小狮子
小老虎
小老虎和大老虎都是老虎
请问如何按每行中老虎出现的次数从大到小分5行输出:
小老虎和大老虎都是老虎
小老虎像大老虎
小老虎
小老虎
小狮子

#!usr/bin/env python

# -*- coding: utf-8 -*-

def getFormat(filename):

    with open(filename) as f:

        return map(str.strip, sorted(f, key=lambda line : 100 - line.count('老虎')))

result = getFormat('/home/a')

for i in result:

    print i 

IDLE 2.6.5      ==== No Subprocess ====

>>> 

小狮子

小老虎

小老虎

小老虎像大老虎

小老虎和大老虎都是老虎

>>>

追问

with open(filename) as f:
^
SyntaxError: invalid syntax
为什么是这个错误

追答

python2.6以上版本可用,你写成这样就可以了:
def getFormat(filename, length=100):
return map(str.strip, sorted(file(filename), key=lambda line : length - line.count('老虎')))

也就是用一句话的那个:
result = map(str.strip, sorted(file('/home/a'), key=lambda line : 100 - line.count('老虎')))
就足够了

追问

我先去吃饭,谢谢你阿,等下有问题问你 哦

追答

私聊……

追问

如何限制条数且不含老虎的不输出

追答

#!usr/bin/env python
# -*- coding: utf-8 -*-

def getFormat(filename, limit=10, kword='老虎'):
result = set()
for line in open(filename):
if kword in line and limit > 0:
result.add(line.strip())
limit -= 1
return sorted(result, key=lambda line : -line.count(kword))

result = getFormat('./a')
for i in result:
print i

IDLE 2.6.5 ==== No Subprocess ====
>>>
小老虎和大老虎都是老虎
小老虎像大老虎
小老虎
>>>
你把limit改成几就只显示几个结果

追问

cursor = conn.cursor()
file_write = open('/home/a,'w')
sql = "select * from test"
cursor.execute(sql)

rs_w = cursor.fetchall()
for row_w in rs_w:
file_write.write(row_w[1].encode('utf8')+'\n')
cursor.close()
conn.close()

追答

#!usr/bin/env python
# -*- coding: utf-8 -*-

import sqlite3

conn = sqlite3.connect('test.db')
cursor = conn.cursor()
sql = 'select * from test_table'
cursor.execute(sql)
rs_w = cursor.fetchall()

cursor.close()
conn.close()

content = set()
for row in rs_w:
content.add(row[0])

def getTiger(aset, top=20, kword=u'老虎'):
return sorted([line for line in aset if kword in line], key=lambda line : -line.count(kword))[:top]

for line in getTiger(content):
print line

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-08
a追问

相似回答
大家正在搜