python排序问题,给出一个txt文件,怎样按分数高低进行排序?

给出一个txt文件,里面有250个电影及分数,票数。怎样按分数高低进行排序?前面的读取数据都已完成,只剩主程序中的排序了。。。我是新手啊,太难的看不懂。1.9.1TheS... 给出一个txt文件,里面有250个电影及分数,票数。怎样按分数高低进行排序?前面的读取数据都已完成,只剩主程序中的排序了。。。我是新手啊,太难的看不懂。
1. 9.1 The Shawshank Redemption (1994) 523,454
2. 9.1 The Godfather (1972) 413,724
3. 9.0 The Godfather: Part II (1974) 247,199
4. 9.0 Inception (2010) 198,670
5. 8.9 Il buono, il brutto, il cattivo. (1966) 161,898
6. 8.9 Pulp Fiction (1994) 420,655
7. 8.9 Schindler's List (1993) 278,237
8. 8.8 12 Angry Men (1957) 120,338
9. 8.8 One Flew Over the Cuckoo's Nest (1975) 216,124
10. 8.8 Star Wars: Episode V - The Empire Strikes Back (1980) 279,549
给定的文本里面已经排好了,但是是要输入一个指定的年份,再输出那一年的电影,好像就是一个提取的过程。
展开
 我来答
蒲公英随风飘舞哈
2010-10-25 · TA获得超过1431个赞
知道小有建树答主
回答量:324
采纳率:0%
帮助的人:590万
展开全部
把你每条数据的格式发出来看下。
不然不好弄。

其实就是通过正则表达式等方式,把分数提取出来,然后排序就行了。

给你两个函数,你自己组合吧

#构建一个列表,filename是你txt文件的路径,构建的列表,按照分数进行排序并返回,参数reverse为False则为升序,为True则为降序

def build_list(filename):
import re

reslist = []

fp = open(filename)
textlist = fp.readlines()
fp.close()

pattern = re.compile("(\\d*)\\.\\s*(\\d*\\.\\d*)\\s*([\\s\\S]*(?=\\(\\d*\\)))\\((\\d*)\\)\\s*([\\w,]*)")

for text in textlist:
pr = pattern.search(text)
if pr:
reslist.append((pr.group(1),pr.group(2),pr.group(3),pr.group(4),pr.group(5)))

reslist.sort(key = lambda x:float(x[1]))
return reslist

#根据输入的year参数,返回year年度的电影资料的列表,year为字符串,movielist为使用上面的build_list函数生成的列表
def list_movie_by_year(movielist,year):
return [x for x in movielist if x[3] == year]

如,你数据的路径为d:\data.txt

sorted_list = build_list('d:/data.txt')

想找1993年的数据,
则调用函数
list_movie_by_year(sorted_list,'1993')
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
锐道
2025-09-24 广告
URule Pro Java 规则引擎,一款给业务人员使用的可视化商业决策规则引擎系统,打开浏览器即可开始设计业务规则;URule Pro是一款自主研发纯Java规则引擎,亦是一款国产智能风控决策引擎,可以运行在Windows、Linux、... 点击进入详情页
本回答由锐道提供
书荒莫慌
2010-10-24 · TA获得超过2972个赞
知道小有建树答主
回答量:700
采纳率:0%
帮助的人:632万
展开全部
比如你的文件叫做film.txt吧。
import re
time="1994" #查询的年份
for i in open("film.txt","r"):
if re.search("(%s)"%time,i):
print i

#前提是年份都是(1985)这种样子,如果括号不一定有的话,把括号去掉估计也行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2010-10-26
展开全部
竟然有人在知道问作业。。。不知道这题是老师自己出的么。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
孙悟空54
推荐于2016-06-13 · TA获得超过1008个赞
知道小有建树答主
回答量:214
采纳率:0%
帮助的人:387万
展开全部
import string
import math

file=open('top250.txt','r')

file.readline()
file.readline()

order=range(250)
for i in order:
s=file.readline()
k=s.split()
order[i]=k

year=int(raw_input('please input a year'))

total=0

for m in order:
str_year=m[len(m)-2]
s_year=int(str_year[1:5])
if year==s_year:
total=total+1

i=0
indexing=range(total)
for m in order:
str_year=m[len(m)-2]
s_year=int(str_year[1:5])
if year==s_year:
indexing[i]=m
i=i+1

i=0
while total>0:
m=0
while m<total-1:
if indexing[m][2]>indexing[m+1][2]:
s=indexing[m]
indexing[m]=indexing[m+1]
indexing[m+1]=s
m=m+1
total=total-1

def letter(list,pop):
letter=list[pop][2]
return letter[0]

def fen(list0,pop0):
st=list0[pop0][1]
return float(st)

i=0
while i<400:
x=0
while x<len(indexing)-1:
if letter(indexing,x)==letter(indexing,x+1):
if fen(indexing,x)<fen(indexing,x+1):
y=indexing[x]
indexing[x]=indexing[x+1]
indexing[x+1]=y
x=x+1
i=i+1

def vott(list1,pop1):
s=list1[pop1][-1]
e=string.split(s,',')
return int(e[0])*1000+int(e[1])

w=0
while w<300:
x=0
while x<len(indexing)-1:
if letter(indexing,x)==letter(indexing,x+1):
if math.fabs(fen(indexing,x)-fen(indexing,x+1))<10**(-2):
if vott(indexing,x)<vott(indexing,x+1):
g=indexing[x]
indexing[x]=indexing[x+1]
indexing[x+1]=g
x=x+1
w=w+1

i=0
while i<len(indexing):
o=indexing[i]
string1=string.join(o)
print string1
i=i+1
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式