gpt4 book ai didi

python - 以特定方式对文件进行排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:45 24 4
gpt4 key购买 nike

我的目录中有一个文件列表,现在我打算将内容保存到数据库中。然而,在此之前,我需要按正确的顺序对它们进行排序。

当前排序如下:

['8.txt', '8-0.txt', '8-1.txt', '8-2.txt', '8-0-0.txt', '8-0-1.txt',
'8-0-2.txt', '8-0-3.txt', '8-1-0.txt', '8-2-0.txt', '8-2-1.txt']

我希望他们的顺序如下:

['8.txt', '8-0.txt', '8-0-0.txt', '8-0-1.txt', '8-0-2.txt', '8-0-3.txt', 
'8-1.txt', '8-1-0.txt', '8-2.txt', '8-2-0.txt', '8-2-1.txt']

基本上,将这些文件视为帖子、评论和回复。

没有任何破折号的第一个文件“8.txt”是原始帖子。接下来我们有一组评论,例如“8-0.txt”、“8-1.txt”等,即文件名中的一个破折号。最后,对于每条评论,可能会有一些回复,其名称格式为“8-2-0.txt”、“8-2-1.txt”(2 个破折号)。

虽然我知道蛮力方式绝对可以进行这种排序,但我想知道是否有任何 Pythonic 方式(例如排序函数中的一些 lambda 函数)

现在我们可以假设文件名中最多只有 2 个破折号,即不超过 3 个层级。

非常感谢任何帮助!

最佳答案

困难在于正确地对类似于

的事物进行排序
8-1-12.txt   # simply removing non digits ==> 8112 
8-11-2.txt # simply removing non digits ==> 8112 as well

简单的解决方案是利用 tuple - 排序:

f = ['8.txt', '8-0.txt', '8-0-0.txt', '8-0-1.txt', '8-0-2.txt', '8-0-3.txt', 
'8-1.txt', '8-1-0.txt', '8-2.txt', '8-2-0.txt', '8-2-1.txt','8-12-0.txt',
'8-1-12.txt', '8-11-2.txt']

def to_tuple(text):
"""Extract all numbers from file as tuple (8,1,3) ... etc."""
return tuple(map(int, text.split(".")[0].split("-") ))

f.sort(key = to_tuple)
print(f)

输出:

['8.txt', '8-0.txt', '8-0-0.txt', '8-0-1.txt', '8-0-2.txt', '8-0-3.txt', 
'8-1.txt', '8-1-0.txt', '8-1-12.txt',
'8-2.txt', '8-2-0.txt', '8-2-1.txt',
'8-11-2.txt', '8-12-0.txt']

如果您的名称包含不可转换的内容,您需要使用 try: except: 并改进 to_tuple() 函数以正确处理您的名称。

关于python - 以特定方式对文件进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53481190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com