查找循环中具有特定单词的文件?

时间:2018-11-22 14:35:54

标签: python

在该文件夹中,文件名为:a11.shp,a11.shx,u21.shp,u21.shx

import os 
words = ('a11','u21')
for root, dirs,files in os.walk(r'C:\Users\user\Desktop\folder1'):
    for i in files: 
        if i in words:
            print(i)
  

TypeError:元组索引必须是整数或切片,而不是str

它需要某种索引才能使元组运行所有项目。

我想将其用作“包含”该词,在这种情况下,它不像包含in那样工作。

在元组中给出这些确切的单词时,该怎么办?没有startswith

2 个答案:

答案 0 :(得分:0)

我发现为变量选择描述性名称使代码更易于阅读。在下面检查我的示例:

import os

words = ('a11','u21')

for root, dirs, files in os.walk(r'C:\Users\user\Desktop\folder1'):
    for filename in files:
        for word in words:
            if word in filename:
                print('Match: "', word, '" is in "', file, '"', sep='')

这段代码产生了我认为您想要的结果。

答案 1 :(得分:-1)

我认为if words in i:的(可行的)想法是if any(w in i for w in words),但它与子字符串(不是精确的字符串)匹配,并且速度不是很快。

您必须反过来执行此操作。测试file_without_extension in words

例如这样的

for i in files: 
    # check if the filename (without extension) is in "words" iterable
    if os.path.splitext(i)[0] in words:
        print(i)

如果您有很多“单词”,请使用set而不是tuple来进行更快的查找(words = {'a11','u21'})。