【问题标题】:Sort elements in a list based on a csv column (Python)根据 csv 列对列表中的元素进行排序(Python)
【发布时间】:2022-01-13 16:21:41
【问题描述】:

我有一个包含不同文件路径的列表。我想通过将这些路径的主干(即文件名)与包含文件名的 csv 文件中的列进行匹配来对此列表中的元素进行排序。这是为了确保列表按 csv.xml 中包含的文件名的顺序显示元素。 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]

我不确定如何从这里继续前进。

【问题讨论】:

    标签: python list csv sorting path


    【解决方案1】:

    我假设您已经知道如何打开和解析 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 导入 basenamesplitext 而不是从 os.path 导入,以便这段代码可以在我的 linux 机器上运行。请参阅此相关问题:Get basename of a Windows path in Linux

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多