牛骨文教育服务平台(让学习变的简单)
博文笔记

一个python小程序,从文本文件中读取每行的两组数字,进行排序后输出.

创建时间:2004-09-02 投稿人: 浏览次数:15007

qq组里面有人问的,本身是很简单的,写出来玩玩:

文本文件x.txt的内容是

122222     8613332000566
10             8613032222202
103335     8613011318800
1000         8613132546186
10000       8613312073654
100000     8613034348185
100001     8613034332328
10005       8613194682965
100003     8613102251300
100006     8613032226257
100005     8613116000937

两个数字之间隔了一个"/t"

f=open("x.txt")                                    #如果你的x.txt文件不在python的路径下,那么必须用绝对路径
l1=f.readlines()                                   #这时候l1的结果是一个list,每个元素是文件的每一行,包括转行符号"/n"
l1=[x.split("/t") for x in l1]
l1=[[x[0],x[1].replace("/n","")] for x in l1]   #这里去掉了每行的"/n"符号
f.close()                                                   #关闭刚才打开的文件
#现在的l1 是一个这样的list:它的每个元素也是一个list,后者的两个元素分别存放了文件每行的第一和第二列数字
f=("y.txt","w")#新建一个可写的文本文件,用来存放结果

#这时直接利用l1.sort()排序的结果不知道为何总是有错误,.那个10005 总是排到倒数第三个位置,真奇怪,只有转化为int型再排序了

l2=[[int(x[0]),int(x[1])] for x in l1]
l2.sort()
l2=[str(x[0])+"/t"+str(x[1])+"/n" for x in l2]
f.writelines[l2]
f.close()

最后y.txt的结果是:

10           8613032222202
1000       8613132546186
10000     8613312073654
10005     8613194682965
100000   8613034348185
100001   8613034332328
100003   8613102251300
100005   8613116000937
100006   8613032226257
103335   8613011318800
122222   8613332000566

结果根据第一列的数字进行排序.

注:假如直接对l1.sort(),结果是:

10           8613032222202
1000       8613132546186
10000     8613312073654
100000   8613034348185
100001   8613034332328
100003   8613102251300
100005   8613116000937
100006   8613032226257
10005     8613194682965
103335   8613011318800
122222   8613332000566
很奇怪

 

如果是直接在命令行操作,具体步骤如下:

 

>>> f=open("x.txt")
>>> l1=f.readlines()
>>> l1
["122222/t8613332000566/n", "10/t8613032222202/n", "103335/t8613011318800/n", "1000/t8613132546186/n", "10000/t8613312073654/n", "100000/t8613034348185/n", "100001/t8613034332328/n", "10005/t8613194682965/n", "100003/t8613102251300/n", "100006/t8613032226257/n", "100005/t8613116000937"]
>>> l1=[x.split("/t") for x in l1]
>>> l1
[["122222", "8613332000566/n"], ["10", "8613032222202/n"], ["103335", "8613011318800/n"], ["1000", "8613132546186/n"], ["10000", "8613312073654/n"], ["100000", "8613034348185/n"], ["100001", "8613034332328/n"], ["10005", "8613194682965/n"], ["100003", "8613102251300/n"], ["100006", "8613032226257/n"], ["100005", "8613116000937"]]
>>> f.close()
>>> l1=[[int(x[0]),int(x[1])] for x in l1]
>>> l1
[[122222, 8613332000566L], [10, 8613032222202L], [103335, 8613011318800L], [1000, 8613132546186L], [10000, 8613312073654L], [100000, 8613034348185L], [100001, 8613034332328L], [10005, 8613194682965L], [100003, 8613102251300L], [100006, 8613032226257L], [100005, 8613116000937L]]
>>> l1.sort()
>>> l1
[[10, 8613032222202L], [1000, 8613132546186L], [10000, 8613312073654L], [10005, 8613194682965L], [100000, 8613034348185L], [100001, 8613034332328L], [100003, 8613102251300L], [100005, 8613116000937L], [100006, 8613032226257L], [103335, 8613011318800L], [122222, 8613332000566L]]
>>> f=open("y.txt","w")
>>> f.writelines([str(x[0])+"/t"+str(x[1])+"/n" for x in l1])
>>> f.close()
>>>

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。