1

文字列のリストがあり、リスト内の文字列がファイル名に表示されている場合は、python でファイルを開く必要があります。問題は、文字列がリストに表示される順序で python がファイルを開くようにしたいということです。私の現在のコードは、pythonが望む順序でファイルを開き、リスト内の文字列がファイル名に表示されるかどうかのみをチェックします。

ファイル

dogs.html
cats.html
fish.html

パイソン

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 に答える