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

问题描述 投票:0回答:3

我试图对一个结果进行排序,然后在字符之后的整数字符':'之后写入输出文件。

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

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

**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!

谢谢您的帮助。

python-3.x string sorting output text-files
3个回答
1
投票
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

0
投票

我会从一开始就按顺序插入行,你可以使用二进制搜索有效地完成。

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

回答:

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

案例2:您不知道位数:

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

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

这就是我现在想出来的!


0
投票

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

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

在您的情况下,您可以定义一个简单的函数,它提取最后三个字符并按字母顺序排序:

def num_sort(x):
   return x[-3:]
your_list.sort(key=num_sort)
© www.soinside.com 2019 - 2024. All rights reserved.