尝试使用key
参数:
def sort():
winfile = list()
with open ('winners.txt') as fin:
for line in fin:
winfile.append(line.strip('\n'))
winfile.sort(key=lambda x: int(x.split()[0]))
with open('SortWin.txt','w+') as fout:
for winfile in winfile:
fout.write(winfile + '\n')
,
为了按第一列对行进行排序,您必须先对它们进行拆分,然后通过向key
提供适当的sort()
进行相应的排序:
import operator
if __name__ == "__main__":
with open("to_be_sorted.txt","r",encoding="utf-8") as f:
data = [line.split() for line in f.readlines()]
sort_by_first_column = lambda line: int(operator.itemgetter(0)(line))
data.sort(key=sort_by_first_column)
for line in data:
print(" ".join(line))
,
从winners.txt中读取后,您的winfile包含字符串列表。
这就是为什么sort()函数按字母顺序对字符串进行排序的原因。
一种方法,您可以将字符串拆分为两个项目元组/列表(最快的是split()拆分为list),将第一项转换为int。
现在,您对该列表进行排序。输出将是单独的字符串列表。
def get_key(pair):
pair = pair.split()
return int(pair[0])
def sort():
winfile = list()
with open ('winners.txt') as fin:
for line in fin:
winfile.append(line.strip('\n'))
winfile.sort(key = get_key)
with open('SortWin.txt','w+') as fout:
for winfile in winfile:
fout.write(winfile + '\n')
,
因为python open
函数将返回某个String
对象,所以像这样的数字"11"
而不是11
,您可以用int()
进行转换,但是有简单的方法,请使用pandas
模块。
我认为您的文字是这样的:
11 Tom
2 Tom
20 Ben
20 Tom
21 Ben
1。使用第三方(推荐)
第一。您应该安装熊猫pip install pandas
。
pands.read_csv site
import pandas as pd
# sep is Delimiter to use,default is comma
df = pd.read_csv('winners.txt',header=None,names=['num','name'],sep=' ',dtype={'num': int,'name': str})
df = df.sort_index(by='num')
df.to_csv('SortWin.txt',index=False,mode='w+')
最后,这样的结果
2 Tom
11 Tom
20 Ben
20 Tom
21 Ben
2。原始的python函数解决方案
不要使用第三方,我们也可以这样做。
def sort():
winfile = list()
with open ('winners.txt') as fin:
for line in fin:
winfile.append(line.strip('\n'))
winfile.sort(key=lambda x: int(x.split(' ')[0]))
with open('SortWin.txt','w+') as fout:
for winfile in winfile:
fout.write(winfile + '\n')
本文链接:https://www.f2er.com/3138246.html