根据 csv 列对列表中的元素进行排序 (Python)

Sort elements in a list based on a csv column (Python)

我有一个包含不同文件路径的列表。我想通过将这些路径的主干(即文件名)与包含文件名的 csv 文件中的列相匹配来对该列表中的元素进行排序。这是为了确保列表按照 csv 中包含的文件名的顺序显示元素。 csv 类似于如下所示:

我做了以下事情:

file_list = ['C:\Example\SS\e342-SFA.jpg', 'C:\Example\DF\j541-DFS.jpg', 'C:\Example\SD\p162-YSA.jpg']

for f in file_list:
    x = Path(f).stem # grabs file name from file_list without .jpg
    for line in csv_file:
        IL = line.replace(":", "").replace("\n", "").replace("(", "").replace(")", "")
        columns = IL.split(",")
        if columns[3] == x: # column[3] = File name in csv
            [do the sorting]

我不确定如何从这里继续下去。

我假设您已经知道如何打开和解析 csv 文件,因此您已经有了列表 ['p162-YSA', 'e342-SFA', 'j541-DFS']

from ntpath import basename, splitext
 
order_list = ['p162-YSA', 'e342-SFA', 'j541-DFS']
file_list = ['C:\Example\SS\e342-SFA.jpg', 'C:\Example\DF\j541-DFS.jpg', 'C:\Example\SD\p162-YSA.jpg']
 
order_dict = {}
for i, w in enumerate(order_list):
    order_dict[w] = i
# {'p162-YSA': 0, 'e342-SFA': 1, 'j541-DFS': 2}
 
sorted_file_list = [None] * len(file_list)
for name in file_list:
    sorted_file_list[ order_dict[splitext(basename(name))[0]] ] = name
 
print(sorted_file_list)
# ['C:\Example\SD\p162-YSA.jpg', 'C:\Example\SS\e342-SFA.jpg', 'C:\Example\DF\j541-DFS.jpg']

注意:我选择从 ntpath 而不是从 os.path 导入 basenamesplitext,这样这段代码就可以 运行 在我的 linux 机器。请参阅此相关问题:.