Python对文本里面的内容排序
读取文本里的内容,并排序,再写入文本比如一个文本里面有5KB,100KB,1MB,3MB9MB2MB等等要求排序。求解惑。。。。...
读取文本里的内容,并排序,再写入文本比如一个文本里面有5KB ,100KB ,1MB,3MB 9MB 2MB等等要求排序。求解惑。。。。
展开
3个回答
展开全部
把文本的格式贴出来看看
假设格式是:
5KB
100KB
1MB
3MB
9MB
2MB
可用下面的程序(python3)
units={"KB" : 1, "MB" : 1024}
def calc(x):
for unit, amount in units.items():
if x.find(unit)>0:
number=int(x[:-2])
number*=amount
return number
file=open("sort.txt", "r")
values=list(file)
file.close()
values=[ value[:-1] for value in values]
values.sort(key=calc)
print(values)
values=[value+"\n" for value in values]
file=open("sort.txt", "w")
file.write("".join(values))
file.close()
追问
2.7怎么弄呢。。
追答
print(values) 改成 print values
展开全部
先需要转换啊。将KB,MB都转换成计算机可以读的数据 1024, 1024*1024, 然后就可以排序了。
s="5KB,100KB,1MB,3MB,9MB,2MB"
s=s.replace("KB","*1024").replace("MB","*1024*1024")
ss=[c.strip() for c in s.plit(",") if c.strip()]
ss=map( eval, ss)
ss.sort()
当然你还可以将5120这样的数字转换成5KB, 这样更容易读,办法就是用1024除,直到小于1024
s="5KB,100KB,1MB,3MB,9MB,2MB"
s=s.replace("KB","*1024").replace("MB","*1024*1024")
ss=[c.strip() for c in s.plit(",") if c.strip()]
ss=map( eval, ss)
ss.sort()
当然你还可以将5120这样的数字转换成5KB, 这样更容易读,办法就是用1024除,直到小于1024
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询