2016-05-27 4 views
0

я итерация всего каталога с более чем 5k XML-файлов, и я хочу, чтобы имя файла, только если он содержит строку «стоп» под тегом <name>, который сам является потомком тега <object>:Почему я не могу получить имя файла в инструкции if?

import xml.etree.ElementTree as etree 
import os 
path = '/home/devf12/Documents' 
listofnames = [] 

for filename in os.listdir(path): 
    if not filename.endswith('.xml'): continue 
    fullname = os.path.join(path, filename) 
    tree = etree.parse(fullname) 
    root = tree.getroot() 
    objects = [tag for tag in root.findall('object')] 
    for tag in objects: 
     objname = tag.findtext('name') 
     print filename # this is the last place that it will print the filename 
     if objname is 'stop': # but I need to narrow it down if it meets this condition 
      print filename # why wont it print here? 

Кто-нибудь знает, почему мой текущий код не достигает этого и как это можно сделать?

+1

Не используйте 'is' для сравнения строк. Он должен работать, если вы используете 'if objname == 'stop':'. –

+0

черт возьми, я целеустремленно использовал, потому что == сообщал об ошибке по какой-то причине, когда я впервые ее попробовал. Но теперь это работает ... Спасибо! Если вы хотите, вы можете написать ответ @Rawing, чтобы я мог дать вам награду вам, как ответили. – Vrankela

+0

вы можете напечатать objname и проверить, что он содержит, чтобы убедиться, что в какой-то момент у него есть. Если у вас есть пробел в имени объекта, вы можете попробовать, если «stop» в objename: –

ответ

2

Не используйте is для сравнения строк, используйте ==:

if objname=='stop': 

Различия между is и == были подробно рассмотрены в this thread.

Смежные вопросы