Python:按任意列对文件进行排序,其中列包含时间值

2023-12-29

我有一个人的 .txt 文件,每个人旁边都有两次。这是 .txt 文件

 Xantippe 09:00 11:00
 Erica 10:00 12:06
 Marcia 09:30 11:45
 Elizabeth 10:15 12:10
 Angela 11:30 13:45
 Freda 12:00 14:20
 Maria 12:30 14:10

我需要读取文件,然后获取每一行,读取它,然后第二次对整个列表进行排序。请记住,文件中的数字是字符串对象。因此,基本上最早的时间(即 11:00)应该与他们之前的时间和名称一起位于列表的顶部。例如。Xantippe 09:00 11:00然后在另一行下一行,依此类推。

到目前为止我已经做了:

from Practise1 import timeCalc
with open('LadiesRace.txt', 'r') as f:
  readf = f.read();
  timeX = timeCalc()
  lis = readf.split('\n')
  with open('sortByFinishTime.txt','w') as w:
    def compare(x,y):
      if x[1] > y[1]:
        return 1
      if x[1] < y[1]:
        return -1
      return 0
    #lis.sort()
    for l in lis:
      #line = l.strip()
      slist = l.split(' ')
      print slist[2]

问题是我不能使用字典,只能使用列表。我已成功按名称升序对列表进行排序,但如何按上次排序?


首先,您需要将数据转换为可用的格式...所以让我们将其加载到内存中的列表中 - 重要的是要注意这一点dicts 本身没有顺序,所以我们想使用列表。

with open('myfile.txt') as fin:
    lines = [line.split() for line in fin]

这将删除所有尾随换行符并用空格字符将其分隔...所以我们最终得到:

[['Xantippe', '09:00', '11:00'], ['Erica', '10:00', '12:06'], ['Marcia', '09:30', '11:45'], ['Elizabeth', '10:15', '12:10'], ['Angela', '11:30', '13:45'], ['Freda', '12:00', '14:20'], ['Maria', '12:30', '14:10']]

然后,我们可以使用.sort的方法list - itemgetter是获取序列中第 n 个元素的便捷方法,因此我们有 name、start、end,其中 end 是第二个索引(基于零作为第一个元素,这将是名称)

from operator import itemgetter
lines.sort(key=itemgetter(2))

我们最终得到:

[['Xantippe', '09:00', '11:00'], ['Marcia', '09:30', '11:45'], ['Erica', '10:00', '12:06'], ['Elizabeth', '10:15', '12:10'], ['Angela', '11:30', '13:45'], ['Maria', '12:30', '14:10'], ['Freda', '12:00', '14:20']]

然后写回来:

with open('output.txt', 'w') as fout:
    for el in lines:
        fout.write('{0}\n'.format(' '.join(el)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:按任意列对文件进行排序,其中列包含时间值 的相关文章

随机推荐