Python:如何在列表中找到与元素名称的一部分匹配的元素

Posted

技术标签:

【中文标题】Python:如何在列表中找到与元素名称的一部分匹配的元素【英文标题】:Python: how to find the element in a list which match part of the name of the element 【发布时间】:2017-10-23 13:04:38 【问题描述】:

我有一个要从文件名列表中查找的关键字列表。例如,如果关键字是'U12',我想找到包含'U12'的csv文件,即'h_ABC_U12.csv'并打印出来。

word = ['U12','U13','U14']
file_list = ['h_ABC_U12.csv','h_GGG_U13.csv','h_HVD_U14.csv','h_MMMB_U15.csv']

for x in range (len(word)):
    if word[x] in file_list:
       #print the file name

这是代码的一部分,但经过一些搜索后无法继续。 我需要与单词匹配的全名才能打印出来。

【问题讨论】:

【参考方案1】:

我建议使用os.path.splitext 来获取不带扩展名的文件名。

>>> from os.path import splitext
>>> for f in file_list:
...     name = splitext(f)[0]
...     if any(name.endswith(tail) for tail in word):
...         print(name)
... 
h_ABC_U12
h_GGG_U13
h_HVD_U14

【讨论】:

【参考方案2】:

试试这个 -

for w in word:
     for file in file_list:
         if w in file:
             print file

【讨论】:

【参考方案3】:

您可以尝试使用列表推导:

word = ['U12','U13','U14']
file_list =['h_ABC_U12.csv','h_GGG_U13.csv','h_HVD_U14.csv','h_MMMB_U15.csv']

print [i for i in file_list for b in word if b in i]

【讨论】:

【参考方案4】:

确实

for x in range(len(word)):
    for file in file_list:
        if x in file:
            print file

会做这项工作吗?

【讨论】:

【参考方案5】:

这应该会更好:

for file_name in file_list:
    the_word = next((w for w in word if w in file_name), None)
    if the_word:
        print the_word
        print file_name

或者获取所有文件名的列表:

[file_name for file_name in file_list if next((w for w in word if w in file_name), None)]

【讨论】:

【参考方案6】:
word = ['U12','U13','U14']
file_list = ['h_ABC_U12.csv','h_GGG_U13.csv','h_HVD_U14.csv','h_MMMB_U15.csv']

for file_name in file_list:
  for w in word:
    if w in file_name:
      print(w,file_name)

结果

U12 h_ABC_U12.csv
U13 h_GGG_U13.csv
U14 h_HVD_U14.csv

【讨论】:

以上是关于Python:如何在列表中找到与元素名称的一部分匹配的元素的主要内容,如果未能解决你的问题,请参考以下文章

Prisma:如何找到与 id 列表匹配的所有元素?

Python面试必考重点之列表,元组和字典第一关——如何定义集合/集合与列表有什么区别/如何去掉列表(元组)中重复的元素

如何打印列表中具有起始字母“A”的元素[重复]

CSV:如何在列表中找到下一个更大的值(python)?

在 Python 中复制列表的一部分

使用python从不拼写的村庄名称列表中找到正确的村庄名称[关闭]