如何对包含整数和字符串的路径进行排序? 我的文件名是:
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/