2014-12-29 4 views
-1

У меня есть следующий текст.Как включить этот дополнительный вариант использования в следующий код python

Мне нужно было написать код python, чтобы найти «ссылку», а затем получить все значения после этого, после чего я получу в соответствии с приведенным выше примером. Мне нужно затем получить целочисленные значения из скобок и проверить, больше ли оно нуля, а затем вернуть результат dict, указывающий, какие оптимизации применяются. Теперь дополнительный вариант использования заключается в том, что текст также содержит некоторые дополнительные ключевые слова.

В идеале я хочу, чтобы это было так, что я могу применять несколько регулярных выражений и применять прикладные/не применяемые в моем результирующем dict. Как это сделать.

+0

Вы хотите включить эти три условия if в функцию process_feo_debug_output, правильно? Я не понимал, что вы имеете в виду. –

+0

да, но могу ли я устранить эти условия if, иначе больше регулярных выражений будет означать больше, если утверждения. – station

ответ

0

Вам не нужно редактировать process_feo_debug_output, просто добавьте код в CHECKS. Попробуйте следующее:

from body_parser import Extractor 
import re 

class FEOProcessor(object): 

    CHECKS = [ 
     ('Standard JavaScript Inlining Optimization', ('EMBED_JAVASCRIPT',), 'check_js_inlining'), 
     ('HTML5 Advanced Cache', ('JAVASCRIPT_HTML5_CACHE', 'CSS_HTML5_CACHE'), 'check_html5_advanced_cache'), 
     ('Cookieless Resource Domain', ('RENAME_JAVASCRIPT', 'RENAME_CSS'), 'check_cookieless_resource_domain'), 
     ('Minificatiopn of JS', ('MINIFY_JAVASCRIPT',), 'check_js_minifaction'), 
     ('File Versioning', ('RENAME_JAVASCRIPT', 'RENAME_IMAGE', 'RENAME_CSS'), 'check_file_versioning'), 
     ('Small Image Embedding', ('EMBED_IMAGE',), 'check_small_image_embedding'), 
     ('Responsive Image Loading', ('RESPONSIVE_IMAGES',), 'check_responsive_image_loading'), 
     ('Asynchronous JS and CSS Loading', ('ASYNC_JAVASCRIPT',), 'check_async_js_and_css_loading'), 
     ('JS Pre-Execution', ('PRE_EXECUTE_JAVASCRIPT',), 'check_js_pre_execution'), 
     ('EDGESTART', ('EDGESTART',), 'check_edgestart'), 
     ('Invoke Click OnTouch', ('BlzFastClick',), 'check_click'), 
     ('Cellular Connection Keep-Alive', ('blzEnableMobileHeartbeat',), 'check_cell'), 
    ] 

    def __init__(self): 
     self.parser = Extractor() 
     self.result = dict((k, 'Not Applied') for k,_,_ in self.CHECKS) 

    for _, keys, name in CHECKS: 
     locals()[name] = lambda self, result, _keys=keys: all(result.get(k, 0)>0 for k in _keys) 


    def process_feo_debug_output(self, analysis_id, url): 
     feed = self.parser.start_parser(analysis_id, url, True) 
     result = self.get_feo_tags(feed) 
     for name, _, func in self.CHECKS: 
      self.result[name] = ('Not Applied','Applied')[getattr(self,func)(result)] 
     return self.result 

    def get_feo_tags(self, feed): 
     result = {} 
     tag_list = re.findall(r'(?:TextTransApplied):\s*((?:(?:[A-Z]+(?:_[A-Z\d]+)+)?\(\d+\)\s*(?:,\s*|;))*)', str(feed)) 
     for tag in tag_list: 
      for element in tag.split(","): 
       index = element.index('(') 
       if element[:index].strip(): 
        result[element[:index].strip()] = (element.split("(")[1].rstrip(");")) 
     return result 
    def check_edgestart(self, result): 
     return 1 if 'EDGESTART' in result.keys() else 0 
    def check_click(self, result): 
     return 1 if 'BlzFastClick' in result.keys() else 0 
    def check_cell(self, result): 
     return 1 if 'blzEnableMobileHeartbeat' in result.keys() else 0 
Смежные вопросы