1

我有一个字符串列表,如果列表中的字符串出现在文件名中,那么我希望 python 打开文件。问题是,我希望 python 按照字符串出现在列表中的顺序打开文件。我当前的代码按照 python 想要的顺序打开文件,并且只检查列表中的字符串是否出现在文件名中。

文件

dogs.html
cats.html
fish.html

Python

list = ['fi', 'do', 'ca']
for name in glob.glob('*.html'):
  for item in list:
    if item in name:
      with open(name) as k:
4

4 回答 4

3
lis = ['fi', 'do', 'ca']

for item in lis:
   for name in glob.glob('*.html'):
      if item in name:
         with open(name) as k:

或首先创建所有文件的列表,然后在每次迭代时过滤该列表list

>>> names=glob.glob('*.html')
>>> lis=['fi','do','ca']
>>> for item in lis:
...    for name in filter(lambda x:item in x,names):
...         with open('name') as k:
于 2012-08-20T18:55:22.380 回答
0

您可以创建一组匹配项:

matching_glob = set([name for name in glob.glob('*.html')])

然后过滤您的列表

list_matching_glob = filter (lambda el: el in matching_glob) filter
于 2012-08-20T18:54:44.670 回答
0

您可以通过重复 glob 调用来简单一点:

names = ['fi', 'do', 'ca']
patterns = [s + "*.html" for s in names]

for pattern in patterns:
    for fn in glob.glob(pattern):
        with open(name) as k:
            pass

您可以使用 os.listdir 和 glob.fnmatch 排除重复的文件系统访问,以防您处理数千个文件。

于 2012-08-20T19:01:13.373 回答
0

我会做这样的事情:

filenames = glob.glob('*.html')

for my_string in my_strings:
    for fname in (filename for filename in filenames if my_string in filename):
        with open(fname) as fobj:
            #do something.
于 2012-08-20T19:01:39.083 回答