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

给出一个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
给定的文本里面已经排好了,但是是要输入一个指定的年份,再输出那一年的电影,好像就是一个提取的过程。

第1个回答  2010-10-25
把你每条数据的格式发出来看下。
不然不好弄。

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

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

#构建一个列表,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')
第2个回答  2010-10-24
比如你的文件叫做film.txt吧。
import re
time="1994" #查询的年份
for i in open("film.txt","r"):
if re.search("(%s)"%time,i):
print i

#前提是年份都是(1985)这种样子,如果括号不一定有的话,把括号去掉估计也行
第3个回答  2010-10-26
竟然有人在知道问作业。。。不知道这题是老师自己出的么。。。
第4个回答  推荐于2016-06-13
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本回答被提问者采纳
相似回答