将所有十六进制颜色值更改为rgb

Dev*_*evC 0 python parsing python-2.7

我有大约50个css文件,有200多个颜色条目.我需要将所有十六进制颜色值转换为rgb.是否有任何工具可以让我的任务变得容易,否则我必须打开每个css文件并手动完成.

例如

color:#ffffff;
Run Code Online (Sandbox Code Playgroud)

应转换为

color: rgb(255,255,255);
Run Code Online (Sandbox Code Playgroud)

我对Python很满意,所以如果python中有一些东西可以让我的工作更轻松.有一个非常好的python方法来进行hex到rgb的转换.但是如何在css文件中读取和替换所有颜色值..确保它们将以#开头.

Mar*_*ers 10

使用该fileinput模块创建可处理1个或多个文件的脚本,根据需要替换行.

使用正则表达式查找十六进制RGB值,并考虑有两种格式; #fff#ffffff.替换每种格式:

import fileinput
import sys
import re

_hex_colour = re.compile(r'#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})\b')

def replace(match):
    value = match.group(1)
    if len(value) == 3:  # short group
        value = [str(int(c + c, 16)) for c in value]
    else:
        value = [str(int(c1 + c2, 16)) for c1, c2 in zip(value[::2], value[1::2])]
    return 'rgb({})'.format(', '.join(value))

for line in fileinput.input(inplace=True):
    line = _hex_colour.sub(replace, line)
    sys.stdout.write(line)
Run Code Online (Sandbox Code Playgroud)

正则表达式查找a #后跟3或6个十六进制数字,后跟一个单词边界(意味着下面的内容不能是字符,数字或下划线字符); 这可以确保我们不会在某个地方意外匹配更长的十六进制值.

#hhh(3位数字)模式由每个十六进制位加倍转换; #abc相当于#aabbcc.十六进制数字转换为整数,然后转换为字符串以便于格式化,然后放入rgb()字符串并返回以进行替换.

fileinput模块将从命令行获取文件名; 如果将其保存为Python脚本,则:

python scriptname.py filename1 filename2
Run Code Online (Sandbox Code Playgroud)

将转换这两个文件.没有使用文件名stdin.