Сценарий Python для минимизации CSS?

Я ищу простой скрипт Python, который может минимизировать CSS как часть процесса развертывания веб-сайта. (Python – это единственный язык сценариев, поддерживаемый на сервере, и полноразмерные парсеры, такие как CSS Utils, являются излишними для этого проекта).

В принципе, мне нужен jsmin.py для CSS. Один скрипт без зависимостей.

  • Как сжать файл с помощью shutil.make_archive в python?
  • Реализации Python: Inflate и Deflate
  • Как вы разархивируете очень большие файлы в python?
  • Python: сокращение использования памяти словарем
  • Модуль zipfile python, похоже, не сжимает мои файлы
  • Python - механизм для идентификации сжатого типа файла и распаковки
  • Есть идеи?

  • Реализации Python: Inflate и Deflate
  • Проблемы CSS с веб-приложением Flask
  • Как вытащить атрибуты CSS из встроенных стилей с помощью BeautifulSoup
  • Не хотите, чтобы изображения загружались и CSS отображался в Firefox в тестах Selenium WebDriver с помощью Python
  • Использование переменной Django в файле CSS
  • Изображение шаблона Django не загружается
  • 6 Solutions collect form web for “Сценарий Python для минимизации CSS?”

    Для меня это показалось хорошей задачей, чтобы я попал в python, который долгое время находился на рассмотрении. Настоящим я представляю свой первый сценарий python:

    import sys, re css = open( sys.argv[1] , 'r' ).read() # remove comments - this will break a lot of hacks :-P css = re.sub( r'\s*/\*\s*\*/', "$$HACK1$$", css ) # preserve IE<6 comment hack css = re.sub( r'/\*[\s\S]*?\*/', "", css ) css = css.replace( "$$HACK1$$", '/**/' ) # preserve IE<6 comment hack # url() doesn't need quotes css = re.sub( r'url\((["\'])([^)]*)\1\)', r'url(\2)', css ) # spaces may be safely collapsed as generated content will collapse them anyway css = re.sub( r'\s+', ' ', css ) # shorten collapsable colors: #aabbcc to #abc css = re.sub( r'#([0-9a-f])\1([0-9a-f])\2([0-9a-f])\3(\s|;)', r'#\1\2\3\4', css ) # fragment values can loose zeros css = re.sub( r':\s*0(\.\d+([cm]m|e[mx]|in|p[ctx]))\s*;', r':\1;', css ) for rule in re.findall( r'([^{]+){([^}]*)}', css ): # we don't need spaces around operators selectors = [re.sub( r'(?<=[\[\(>+=])\s+|\s+(?=[=~^$*|>+\]\)])', r'', selector.strip() ) for selector in rule[0].split( ',' )] # order is important, but we still want to discard repetitions properties = {} porder = [] for prop in re.findall( '(.*?):(.*?)(;|$)', rule[1] ): key = prop[0].strip().lower() if key not in porder: porder.append( key ) properties[ key ] = prop[1].strip() # output rule if it contains any declarations if properties: print "%s{%s}" % ( ','.join( selectors ), ''.join(['%s:%s;' % (key, properties[key]) for key in porder])[:-1] ) 

    Я верю, что это сработает, и он выводит тесты на последних Safari, Opera и Firefox. Это сломает CSS-хаки, кроме подчеркивания & / ** / hacks! Не используйте minifier, если у вас много хакеров (или помещайте их в отдельный файл).

    Любые советы по моему python оценили. Пожалуйста, будьте осторожны, это мой первый раз. 🙂

    Для python имеется порт компрессора CSS YUI.

    Вот его страница проекта на PyPi: http://pypi.python.org/pypi/cssmin/0.1.1

    Я не знаю никаких готовых мини-инструментов python css, но, как вы сказали, у css utils есть опция. После проверки и проверки того, что лицензия позволяет это, вы можете пройти через исходный код и вырезать части, которые выполняют минирование. Затем вставьте это в один скрипт и вуаля! Вот так.

    Как начало, функция csscombine в … / trunk / src / cssutils / script.py, похоже, выполняет работу по минимизации где-то вокруг строки 361 (я проверил ревизию 1499). Обратите внимание на аргумент boolean function, называемый «minify».

    Существует красивый онлайн-инструмент cssminifier, который также имеет API, который довольно прост и прост в использовании. Я сделал небольшой скрипт python, который размещает содержимое файла CSS в API этого инструмента, возвращает миниатюрный CSS и сохраняет его в файл «style.min.css». Мне это нравится, потому что это небольшой код, который может быть хорошо интегрирован в сценарий автоматического развертывания:

     import requests f = open("style.css", "r") css_text = f.read() f.close() r = requests.post("http://cssminifier.com/raw", data={"input":css_text}) css_minified = r.text f2 = open("style.min.css", "w") f2.write(css_minified) f2.close() 

    В случае, если кто-то приземлился на этот вопрос и использует Django, есть широко распространенный пакет по этому вопросу под названием Django Compressor :

    Сжимает связанный и встроенный JavaScript или CSS в один кешированный файл.

    • JS / CSS принадлежат шаблонам

    • гибкость

    • Это не мешает

    • Полный комплект тестов

    В документах webassets вы можете найти ссылки на несколько компрессоров и компиляторов. Из этого списка я выбрал pyScss , который также минимизирует полученный CSS.

    Если вам нужен только компрессор CSS, вы можете попробовать csscompressor :

    Почти точный порт YUI CSS Compressor. Пропускает все оригинальные unittests.

    Более общий инструмент – css-html-prettify :

    StandAlone Асинхронный однофайловый кросс-платформенный готовый к использованию Unicode Python3 Prettifier Beautifier для Интернета.

    Python - лучший язык программирования в мире.