Цикл по каталогу и поиск во всех предварительно отфильтрованных файлах XML по слову - PullRequest
0 голосов
/ 23 сентября 2010

Я хотел бы пройтись по заданному каталогу и искать во всех предварительно отфильтрованных файлах поисковое слово.Я подготовил этот код, но он не перебирает все файлы, анализируется только последний найденный файл.В идеале все файлы должны быть проанализированы, а выходные данные должны быть сохранены в текстовом файле.Может ли кто-нибудь помочь?

import os, glob

for filename in glob.glob("C:\\test*.xml"):
    print filename

for line in open(filename):
    if "SEARCHWORD" in line:
        print line

ВЫХОД выглядит как:

C:\test-261.xml
C:\test-262.xml
C:\test-263.xml
C:\test-264.xml
<Area>SEARCHWORD</Area>

Ответы [ 2 ]

2 голосов
/ 23 сентября 2010

Отступ 2-го for -циклирования еще на один уровень, чтобы сделать его циклом для каждого найденного файла.

for filename in glob.glob("C:\\test*.xml"):
    print filename

#-->
    for line in open(filename):
        if "SEARCHWORD" in line:
            print line

Кстати, так как вы просто выполняете итерацию для слитого результата вместо его сохранения, вы должны использовать glob.iglob, чтобы сохранить для дублирования списка.Кроме того, лучше поместить это значение open() в with -statement , чтобы файл можно было закрыть должным образом даже при возникновении исключения.

for filename in glob.iglob('C:\\test*.xml'):
   print filename
   with open(filename) as f:
      for line in f:
         if 'SEARCHWORD' in line:
            print line
0 голосов
/ 23 сентября 2010

Вы также можете поместить результаты в файл:

import os, glob
results = open('results.txt', 'w')
for filename in glob.glob("C:\test*.xml"):
    for line in open(filename):
        if "SEARCHWORD" in line:
            results.write(line)
results.close()
...