gpt4 book ai didi

python - 对包含Python路径的列表进行排序

转载 作者:行者123 更新时间:2023-11-28 22:19:35 24 4
gpt4 key购买 nike

如何对包含整数和字符串的路径进行排序?我的文件名是:

tmp_1483228800-1485907200_0, 
tmp_1483228800-1485907200_1,
tmp_1483228800-1485907200_2,
....

我需要根据最后一个下划线后面的整数对它们进行排序。这就是我的代码的样子:

act = "." + "/*/raw_results.csv"
files = glob.glob(act)
sorted_list = sorted(files, key = lambda x:int(os.path.splitext(os.path.dirname(x))[0]))

我知道问题是有很多整数和一些字符串,所以它不能将所有内容都转换为整数,但我不知道如何解决它。提前致谢。

最佳答案

根据您的评论,您的文件将采用以下格式:

>>> files = [".../data/tmp_1483228801-1485907200_10/raw_results.csv",
".../data/tmp_1483228800-1485907200_1/raw_results.csv",
".../data/tmp_1483228801-1485907201_30/raw_results.csv",
".../data/tmp_1483228801-1485907200_2/raw_results.csv",
".../data/tmp_1483228801-1485907201_9/raw_results.csv"]

然后,您可以提取这些完整的原始文件路径中的所有数字,并将其转换为 int。无需将路径拆分为目录路径段。

>>> [[int(n) for n in re.findall(r"\d+", f)] for f in files]
[[1483228801, 1485907200, 10],
[1483228800, 1485907200, 1],
[1483228801, 1485907201, 30],
[1483228801, 1485907200, 2],
[1483228801, 1485907201, 9]]

这将提取路径中的所有数字并按它们排序,为找到的第一个数字赋予最高优先级。如果其他数字都相同,那不是问题,如果不同,则首先按这些数字排序。

>>> sorted(files, key=lambda f: [int(n) for n in re.findall(r"\d+", f)])
['.../data/tmp_1483228800-1485907200_1/raw_results.csv',
'.../data/tmp_1483228801-1485907200_2/raw_results.csv',
'.../data/tmp_1483228801-1485907200_10/raw_results.csv',
'.../data/tmp_1483228801-1485907201_9/raw_results.csv',
'.../data/tmp_1483228801-1485907201_30/raw_results.csv']

如果这不是你想要的,你可以使用(有点浪费)key=lambda f: [int(n) for n in re.findall(r"\d+", f)][-1 ] 仅按最后一个数字排序。

关于python - 对包含Python路径的列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49625891/

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