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

来源:互联网 发布:钢结构雨棚计算软件 编辑:程序博客网 时间:2024/04/29 08:12

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()
>>>

原创粉丝点击