比较Python中两个格式不同的列表?

时间:2018-07-02 16:23:21

标签: python

我需要比较两个记录列表。一个列表具有存储在网络驱动器中的记录:

C:\ root \ to \ file.pdf

O:\另一个\根\到\ record.pdf

...

另一个列表具有存储在协作软件ProjectWise中的记录。它仅包含文件名:

drawing.pdf

file.pdf

...

我想创建一个网络驱动器文件路径的列表,这些路径没有ProjectWise列表中的文件名。它必须包括路径。当前,我正在用正则表达式搜索驱动器列表中每行的列表,该正则表达式由以ProjectWise列表中的任何名称结尾的行组成。该脚本花费了无法忍受的长时间,我觉得我的过程太复杂了。

我曾考虑过使用集合来比较列表(set(list1)-set(list2)),但这只能与文件名一起使用,而无需路径即可返回文件名。

1 个答案:

答案 0 :(得分:0)

如果您在包含文件完整路径的列表上使用os.path.basename,则可以获取文件名,然后将其与其他列表进行比较。

import os

orig_list = [path_dict[os.path.basename(path) for path in file_path_list]

missing_filepaths = set(orig_list) - set(file_name_list)

这将为您提供所有没有关联路径的文件名列表,您应该可以从那里开始。

编辑: 因此,您需要没有关联文件名的路径列表,对吗?然后非常简单。在执行此操作之前,请从代码进行扩展:

paths_without_filenames = [path for path in file_path_list if os.path.split(path)[1] in missing_filepaths]

这将从您的文件路径列表中生成文件路径列表,这些文件路径在文件名列表中没有关联的文件名。