今天本来是在用pygame写一个演示程序,经常会用到一些rgb值,比如:
1 | BLACK = (0, 0, 0) |
其实每个颜色就是一个元组,如果我把它们全写在一个叫mycolor.py的文件中,那我就可以在别的python代码中直接使用,很方便。可惜网上并没有现成的东西….
自己动手吧,开工。当然不能一个一个手工输入啦,要不白学程序了。
我在网上找到了如下的数据:
( 这个RGB数据文件很长,所以 以下的 例子都是从中截取一段用来解释 )
XXXXX #F08080 LightCoral 淡珊瑚色
XXXXX #BC8F8F RosyBrown 玫瑰棕色
XXXXX #CD5C5C IndianRed 印度红
XXXXX #FF0000 Red 纯红
XXXXX #A52A2A Brown 棕色
最前面的XXXXX什么都不是,所以我vim下用一个宏解决 掉
先 把光标移动到第一行的第一个字符出
录制宏
@qa
dt#j
q
这个宏的意思就是删出#前的所有数据,然后光标下移,
之后对所有行执行这个宏就行了。
现在的文件是这个样子,我们把它 命名 为source
:cat source
#F08080 LightCoral 淡珊瑚色
#BC8F8F RosyBrown 玫瑰棕色
#CD5C5C IndianRed 印度红
#FF0000 Red 纯红
#A52A2A Brown 棕色
之后我用linux的cut命令
cut -f 1 source > rgb_0x
cut -f 2 source > en
cut -f 3 source > cn
这样我就又多了三个文件, 分别如下:
:cat rgb_0x
#F08080
#BC8F8F
#CD5C5C
#FF0000
#A52A2A
:cat en:
LightCoral
RosyBrown
IndianRed
Red
Brown
:cat cn:
淡珊瑚色
玫瑰棕色
印度红
纯红
棕色
之所以这样,是为了使程序更加灵活,我们可以将这三个文件随意搭配,如果你学过unix和linux,你就能体会到这种思想,用这种放式组织程序和数据,而不是一个交互式程序,提示用户输入….
现在我们先来把十六进制的rgb转换成我们想要的格式:
#FF0000 =======> (255, 0, 0)
我用python写了一个脚本来完成这个任务getrgb.py
1 | infile = 'rgb_0x' |
运行这个脚本,得到了一个rgb文件
(255,255,255)
(245,245,245)
(220,220,220)
(211,211,211)
接下来一个命令得到我想要得:
paste -d "=" en rgb > mycolor.py
paste 用来链接两个文件,当然,用sed也可以完成这个工作 ,不过杀鸡焉用牛刀。
DarkMagenta =(139,0,139)
Purple =(128,0,128)
MediumOrchid =(186,85,211)
DarkViolet =(148,0,211)
DarkOrchid =(153,50,204)
看上去很不整齐,所以我用vim打开
输入:Tab /=
MediumOrchid = (186,85,211)
DarkViolet = (148,0,211)
DarkOrchid = (153,50,204)
Indigo = (75,0,130)
这是一个叫Tabular的vim插件,用来对齐,对于写代码的vim用户很有用。
当然我们还可以用sed在给每行加一个中文注释,(如果你英语很好,认识这些颜色的名字,就不用了)
像这样:
MediumOrchid = (186,85,211) # 中兰花紫
DarkViolet = (148,0,211) # 暗紫罗兰
DarkOrchid = (153,50,204) # 暗兰花紫
也可以用sed写一个简单的渲染,
把这些数据渲染成一个html页面,这样颜色在html页面上能直接显示了,方便查阅,
现在你明白为什么我要把source cut成三段了吧?