根据 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
导入 basename
和 splitext
,这样这段代码就可以 运行 在我的 linux 机器。请参阅此相关问题:.
我有一个包含不同文件路径的列表。我想通过将这些路径的主干(即文件名)与包含文件名的 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
导入 basename
和 splitext
,这样这段代码就可以 运行 在我的 linux 机器。请参阅此相关问题: