用于缩小CSS的Python脚本?

我正在寻找一个简单的Python脚本,可以将CSS作为网站部署过程的一部分进行缩减。 (Python是服务器上唯一支持的脚本语言,像CSS Utils这样的成熟parsing器对于这个项目来说是过度的)。

基本上我想为CSS的jsmin.py 。 一个没有依赖关系的脚本

有任何想法吗?

对于我来说,这似乎是一个很好的任务,已经有一段时间了。 我现在介绍我的第一个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黑客! 如果你有很多黑客(或把它们放在一个单独的文件中),请不要使用缩小器。

任何提示在我的python赞赏。 请温柔一点,这是我第一次。 🙂

有一个YUI的CSS压缩器的端口可用于Python。

这是PyPi的项目页面: http ://pypi.python.org/pypi/cssmin/0.1.1

我不知道任何现成的python css缩小器,但像你说的css utils有select。 在检查并确认许可证允许之后,您可以通过源代码并剪下自己缩小的部分。 然后把它放在一个脚本里,瞧! 你走了

作为一个开始,… / trunk / src / cssutils / script.py中的csscombine函数似乎在361行(我检出了修订版1499)的某处做了缩小的工作。 请注意名为“minify”的布尔函数参数。

有一个很好的在线工具cssminifier也有一个非常简单和易于使用的API。 我做了一个小型的python脚本,将CSS文件内容发布到该工具的API,返回minifed的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压缩到单个caching文件中。

  • JS / CSS属于模板

  • 灵活性

  • 它不妨碍

  • 完整的testing套件

在webassets文档中,您可以find多个压缩器和编译器的链接。 从那个列表中我select了pyScss ,它也缩小了所得到的CSS。

如果你只需要一个CSS压缩器,你可以尝试csscompressor :

YUI CSS Compressor几乎精确的端口。 通过所有原始单位testing。

更通用的工具是css-html-prettify :

独立的asynchronous单文件跨平台Unicode-ready Python3美化器为网页美化。