如何根据第二个参数对输出文件进行排序?

时间:2019-04-16 13:24:32

标签: python-3.x string sorting output text-files

我正在尝试将某个字符':'后写入输出文件的结果按该字符后的整数排序。

首先,我尝试使用排序功能,但由于它不是列表,因此无法正常工作。我还尝试将所有内容都转换为字符串列表,并尝试进行相应的排序,但我认为这不是最有效的方法。

注意:输出文件行都是字符串

**Current written output in output_file1.txt:**
hi: 011
hello: 000
hero: 001
You are done!

**Expected written output in output_file1.txt:**
hello: 000
hero: 001
hi: 011
You are done!

谢谢您的帮助。

3 个答案:

答案 0 :(得分:0)

我将从一开始就按顺序插入行,您可以使用二进制搜索有效地做到这一点。

Q :如何将当前行中的当前数字与旧文件进行比较。

答案

情况1:如果最大行数为111,(在您的示例中,您从001开始,我假设您用零填充以显示每个数字期望多少位数)或现在最大行数,您可以用足够的零填充,然后您要做的就是将当前数字与行中的最后三个条目进行比较(第[-3:]行)。

情况2:您不知道数字位数:

Sol 2.1:您可以尝试存储单词文件和数字文件,并并行更新它们,这将使您免于Sol 2.2的开销。

Sol 2.2:用定界符':'分隔行并获取数字(不要忘记定界符后有空格)。

这就是我现在能想到的!

答案 1 :(得分:0)

如上所述,无法对文件进行排序。

关于第二个问题,您可以使用list.sort(key=sort_key)。这样,您就可以提供一种在比较元素进行排序时应用于列表中每个元素的方法。

根据您的情况,您可以定义一个简单的函数,该函数提取最后三个字符并按字母顺序对它们进行排序:

def num_sort(x):
   return x[-3:]
your_list.sort(key=num_sort)

答案 2 :(得分:0)

with open(filepath) as file:
    r = file.readlines()

#splits based on ":" and then sort using the second value ie binary numbers
s = sorted([line.split(":") for line in r[1:-1]], key=lambda x: int(x[1]))

s.insert(0,r[0])
s.append(r[-1])

#Write 's' into File