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
?