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

标签 python python-2.7 sorting

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

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/

相关文章:

python-2.7 - 当要拟合的参数之一是幂时,SciPy curve_fit 不起作用

java - 如何按日期对对象列表进行排序(java 集合,List<Object>)

python - 安装 python 模块时出错 - pyzipcode、sqlite3

python - 获取中位数两侧的两个数字

python - 比较 pandas 数据框中的两列以创建第三列

linux - repo 无法在 Macbook 上的 Ubuntu 16,0 虚拟机上初始化

Javascript 按交集对数组进行分组

python - 根据两列进行排序并将值分配给新列

python - numpy - 自动改变形状?

python - 如何使石斑鱼和轴的长度相同?