gpt4 book ai didi

python - 如何按升序对目录列表进行排序?

转载 作者:行者123 更新时间:2023-12-02 18:11:55 24 4
gpt4 key购买 nike

背景

我真的想重命名 16,494,000 个文件,这些文件全部以站点号(1 到 15,000)和类别号(1 到 8)结尾。为此,我想循环遍历这些文件并重命名它们。 问题是我不知道如何对列表中的这些文件路径进行排序。

首先,我使用它来获取 CWD 中的文件路径列表:

import os
import shutil
from pathlib import Path
import glob

lst = os.listdir(os.getcwd())

然后我得到一个非常随机的列表。通常从 10,000_1 开始。我将提供一个简短版本的列表作为示例。

lst = ['10000_1.txt','10000_2.txt','10000_3.txt','10000_4.txt','10000_5.txt','10000_6.txt','10000_7.txt','10000_8.txt',
'1000_1.txt','1000_2.txt','1000_3.txt','1000_4.txt','1000_5.txt','1000_6.txt','1000_7.txt','1000_8.txt',
'16494_1.txt','16494_2.txt','16494_3.txt','16494_4.txt','16494_5.txt','16494_6.txt','16494_7.txt','16494_8.txt',
'100_1.txt','100_2.txt','100_3.txt','100_4.txt','100_5.txt','100_6.txt','100_7.txt','100_8.txt',
'1_1.txt','1_2.txt','1_3.txt','1_4.txt','1_5.txt','1_6.txt','1_7.txt','1_8.txt']

简而言之,我们这里有 5 个网站,有 8 个类别编号:1_(1 到 8)、100_(1 到 8)、1000_(1 到 8)、10000_(1 到 8)和 16494_(1 到 8) 。它们都是.txt。

我尝试过的

lst = lst.sort()
print(lst)

我不知道该怎么办。我尝试过其他事情,但我没有得到任何东西,或者它没有对任何东西进行排序。我希望它看起来像这样:

我想要什么

lst = ['1_1.txt','1_2.txt','1_3.txt','1_4.txt','1_5.txt','1_6.txt','1_7.txt','1_8.txt',
'100_1.txt','100_2.txt','100_3.txt','100_4.txt','100_5.txt','100_6.txt','100_7.txt','100_8.txt',
'1000_1.txt','1000_2.txt','1000_3.txt','1000_4.txt','1000_5.txt','1000_6.txt','1000_7.txt','1000_8.txt',
'10000_1.txt','10000_2.txt','10000_3.txt','10000_4.txt','10000_5.txt','10000_6.txt','10000_7.txt','10000_8.txt',
'16494_1.txt','16494_2.txt','16494_3.txt','16494_4.txt','16494_5.txt','16494_6.txt','16494_7.txt','16494_8.txt']

如有任何帮助,我们将不胜感激!

最佳答案

您需要使用自定义键进行排序:

>>> sorted(lst, key=lambda x: (int(x.split("_")[0]), int(x.split("_")[1].split(".")[0])))

或者:

>>> sorted(lst, key=lambda x: tuple(map(int, x.rstrip(".txt").split("_"))))

关于python - 如何按升序对目录列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72177250/

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