Python:需要帮助比较两个列表



我最近在脚本中发现了一个巨大的错误,我需要一些帮助来解决它。

这个脚本在我们的代码库中搜索多个子目录,找到符合特定条件的所有源文件,并列出名称。我称此列表为:all_files

然后它运行另一个程序,这个程序生成新的源文件(接近相同的名称(,这些文件被放置在另一个目录中。我进入那个目录,列出里面的文件名。我称此列表为:covered_files

现在的问题是,新的源文件名的不同之处在于它们有前导词。例如:

-->all_files中的文件名:fileName.cpp

-->covered_files中的文件名:prefix_fileName.cpp

这两个文件相互对应,这个脚本的任务是返回all_files中显示在covered_files中的名称列表。。。也就是说,在上面的例子中;fileName.cpp";将被添加到列表中,因为它在两者中。

一个主要问题是存在对应于";fileName1.cpp";,fileName2.cpp";,等等。正如你将在我下面的代码中看到的,它只解释了其中一个文件,当它们都需要的时候。

我目前拥有的:

def find_covered_files(all_files):
covered_path = <path to the newly generated files>
# Make a list of every file in the covered folder
covered_files = [f for f in listdir(covered_path) if isfile(join(covered_path, f))]

file_match_list = []
# Seach through the covered files for matches
for cov_file in covered_files:
# Find the file matches
for files in all_files:
if files in cov_file:
file_match_list.append(files)
return file_match_list

因此,总的来说,我的问题是:有没有一种方法可以在两个列表中搜索,其中一个条目是另一个条目的子字符串,无论该子字符串是否出现多次,都可以为我提供所涵盖的每个文件名?提前感谢您的帮助!

编辑:另一个使用一些实际文件名的例子:

有文件Segment.cppSegmentAllocation.cppSegmentImpl.cpp。它们将在all_files列表中,并且在covered_files列表中具有匹配的前缀名称。

在代码运行之后,我希望它们三个都在file_match_list中。但是,只有第一个文件名在其中重复了3次。

因此,代替:(所需(

['Segment.cpp', 'SegmentAllocation.cpp', 'SegmentImpl.cpp']

我得到:

['Segment.cpp', 'Segment.cpp', 'Segment.cpp']

我在调试后回答了这个问题,我需要在for循环中使用一个break语句:

def find_covered_files(all_files(:

covered_path = <path to the newly generated files>
# Make a list of every file in the covered folder
covered_files = [f for f in listdir(covered_path) if isfile(join(covered_path, f))]
file_match_list = []
# Seach through the covered files for matches
for cov_file in covered_files:
# Find the file matches
for files in all_files:
if files in cov_file:
file_match_list.append(files)
break

return file_match_list

相关内容

  • 没有找到相关文章

最新更新