2013-05-16 6 views
-4
def cut(path): 
    test = str(foundfiles) 
    newList = [s for s in test if test.endswith('.UnitTests.vbproj')] 
    for m in newList: 
     print m 
    return newList 

Эта функция анализирует список найденных файлов, который представляет собой список файлов в папке, которую я уже проанализировал примерно из 20 файлов. Мне нужно проанализировать этот список каждого файла, который заканчивается на .UnitTests.vbproj. Однако я не могу заставить его работать. Любой совет будет очень благодарен!Почему этот цикл не работает

Edit1: Это то, что я сделал свой код, и я получаю окно с сообщением об ошибке atrribute говоря, что «кортеж» объект не имеет атрибута «EndsWith»

def cut(path): 
    test = foundfiles 
    newList = [s for s in foundfiles if s.endswith('.UnitTests.vbproj')] 
    for m in newList: 
     print m 
    return newList 
+1

Когда вы говорите * Я не могу заставить его работать *, что вы имеете в виду, работая/не работает? – Maroun

+0

Я сильно подозреваю, что foundfiles на самом деле не является списком строк, а вместо этого списком кортежей, каждый из которых содержит одну строку. Естественно, если это так, «s» будет кортежем, а не строкой. – kampu

+0

Дублирующий вопрос: [Этот цикл должен работать, но его нет] (http://stackoverflow.com/q/16587764/214178) – artdanil

ответ

2

Вы превратили список в строку. Циклическая над test дает отдельные символы вместо:

>>> foundfiles = ['foo', 'bar'] 
>>> for c in str(foundfiles): 
...  print c 
... 
[ 
' 
f 
o 
o 
' 
, 

' 
b 
a 
r 
' 
] 

Там нет необходимости, чтобы превратить foundfiles в строку. Кроме того, необходимо проверить элементы из списка, не test:

newList = [s for s in foundfiles if s.endswith('.UnitTests.vbproj')] 
+0

Если это не строка, как я могу использовать свойство .endwith(), то? Я думал, что вы можете использовать это только на объекте, который является строкой? – BesaseB

+0

@ user2371187: каждый элемент * in * список - это строка. Они присваиваются один за другим '' 'в понимании списка, поэтому мы тестируем' s.endswith() '. –

+0

@Martijin Я просто попробовал ваш переработанный код, и он все еще не работал. (См. «Редактирование») Возможно ли, что я вернусь с помощью findFiles неправильно? – BesaseB

0

Я действительно не знаю, что тип вашей «foundfiles». Может быть, таким образом, поможет вам:

def cut(path): 
    import os 
    newlist = [] 
    for parent,dirnames,filenames in os.walk(path): 
     for FileName in filenames: 
      fileName = os.path.join(parent,FileName) 
      if fileName.endswith('.UnitTests.vbproj'):newlist.append(fileName) 
    return newlist 
Смежные вопросы