python排序问题,给出一个txt文件,怎样按分数高低进行排序?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
给定的文本里面已经排好了,但是是要输入一个指定的年份,再输出那一年的电影,好像就是一个提取的过程。
不然不好弄。
其实就是通过正则表达式等方式,把分数提取出来,然后排序就行了。
给你两个函数,你自己组合吧
#构建一个列表,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') 参考技术B 比如你的文件叫做film.txt吧。
import re
time="1994" #查询的年份
for i in open("film.txt","r"):
if re.search("(%s)"%time,i):
print i
#前提是年份都是(1985)这种样子,如果括号不一定有的话,把括号去掉估计也行 参考技术C 竟然有人在知道问作业。。。不知道这题是老师自己出的么。。。 参考技术D 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本回答被提问者采纳
python怎样批量修改文件名
参考技术A os.rename(a,b)是把a重命名为b(名字带路径)os.listdir(path)以列表形式获取路径下文件(包括文件夹),os.listdir(“.”)是当前文件夹
然后。。。想怎么重命名就怎么写程序。。。遍历,(检查,)修改。。。
如果待重命名的文件和py程序在一个文件夹会很方便,重命名不需要路径,像os.rename(“1.txt”,“2.txt”)
如果重命名的规则没法表述,那只能自己一个个改了。。。本回答被提问者采纳 参考技术B import shutil
import os
os.rename("oldname","newname")
shutil.move("oldpos","newpos")以前两个命令都能改名,先把文件路径放到一个列表里,然后批量调用上面的命令
以上是关于python排序问题,给出一个txt文件,怎样按分数高低进行排序?的主要内容,如果未能解决你的问题,请参考以下文章