2016-02-15 3 views
0

В Python 2.7 я хочу найти и подсчитать файлы, которые имеют определенный список строк в имени файла.Как искать элементы списка внутри строк в Python

Список файлов:

  • Passport_Mike.pdf
  • Давид-Passport.pd
  • Iain ID Card.pdf
  • CopyPassport Michael.pdf
  • Водительские права John.pdf

Я хочу рассчитать все файлы, в которых есть идентификатор «Passport'or».

В настоящее время я нашел способ, в котором я разбил имя файла на разные слова на основе разделителей (_-/'). Мои файлы не всегда можно найти, потому что файлы не всегда могут быть разделены, например, «CopyPassport Michael», потому что у него нет соответствующего разделителя, который разделяет «Паспорт» с «Копировать».

Мой код основан на this ответах, заданных в другом вопросе. Для этого кода я использую collections.Counter()

Вот мой код:

from collections import Counter 

listOfFiles = [Passport_Mike.pdf, David-Passport.pdf, Iain ID Card.pdf, CopyPassport Michael.pdf, Driving License John.pdf] 
searrchTermsList = ["Passport", ÏD'] 

def fileSplit(string, delimiters): 
    delimiters = tuple(delimiters) 
    stack = [string,] 

    for delimiter in delimiters: 
     for i, substring in enumerate(stack): 
      substack = substring.split(delimiter) 
      stack.pop(i) 
      for j, _substring in enumerate(substack): 
       stack.insert(i+j, _substring) 
    return stack 
#This is a complicated split function but this method makes the files split into parts in my next function. Other split methods didn't work for me. 

def searchTermsCount(listOfFiles, searchTermsList): 
      counts = Counter()    
      for myFile in listOfFiles: 
       myFileSplit = fileSplit(myFile,('_',' ','-','.')) 
       counts.update(word.upper() for word in myFileSplit) 
      myCount = 0 
      for word in searchTermsList: 
       myCount +=counts[word] 
      print "Count files:", myCount 

Что такое метод Python 2.7 для подсчета файлов, которые имеют список строк в имени файла без использования разделителей?

ответ

1

Попробуйте это:

listOfFiles = ['Passport_Mike.pdf', 'David-Passport.pdf', 'Iain ID Card.pdf', 'CopyPassport Michael.pdf', 'Driving License John.pdf'] 
searrchTermsList = ["Passport", 'ID'] 
relevantfiles = [filename for filename in listOfFiles if any(searchterm in filename for searchterm in searrchTermsList)] 
print(relevantfiles) 

Выход:

['Passport_Mike.pdf', 'David-Passport.pdf', 'Iain ID Card.pdf', 'CopyPassport Michael.pdf'] 
+0

здорово! Это простое решение отлично поработало! – Jelle

0
listOfFiles = ['Passport_Mike.pdf', 'David-Passport.pdf', 'Iain ID Card.pdf', 'CopyPassport Michael.pdf', 'Driving License John.pdf'] 
searrchTermsList = ['Passport', 'ÏD'] 

filenamesWithTerms = [] 
for filename in listOfFiles: 
    for term in searrchTermsList: 
     if term in filename: 
      filenamesWithTerms.append(filename) 
      break 
print filenamesWithTerms 
>>['Passport_Mike.pdf', 'David-Passport.pdf', 'Iain ID Card.pdf', 'CopyPassport Michael.pdf'] 
Смежные вопросы