分类: Python, 编程相关      
cocobear写于08年08月21日11点11分

wxPython写的一计算器

wxPython写了个计算器,练习wxPython界面布局,功能很强大,支持无限数位的运算,呵呵:-)
wxPython写界面挺顺手的,另外推荐一个不错的wxPython的教程:
http://www.zetcode.com/wxpython

CoCal

代码下载

分类: Shell, 编程相关      
cocobear写于08年08月19日15点42分

shell脚本解题6

问题:
执行命令前暂时回home目录,执行后跳回来

解法:
1.

BASH:
  1. (cd ~; ls; )

使用子shell的方式去执行命令;

把这行
gs.AddMany( [b_cls,b_bck,t_blank,b_close,b_7,b_8,b_9,b_div,b_4,b_5,b_6,b_mul,b_1,b_2,b_3,b_minus,b_0,b_dot,b_equal,b_plus, ])
进行替换,每一个元素替换为类似(b_cls,0,EXPAND)这样

解法1.

BASH:
  1. sed 's/[b|t]_[^,]*,/(&0,EXPAND)/g'

如果使用

BASH:
  1. 's/[b|t]_.*?,/(&0,EXPAND)/g'

则不能得出正确的结果,因为sed不支持.*?这样的非贪婪匹配;解法中使用[^,]避免了贪婪匹配。

再看一正则表达式str="uid=100(guest) gid=100(others) groups=10(users),11(floppy)"

输出guest:echo $str|sed 's/[^(]*(\([^)]*\)).*/\1/'
输出各括号里的:echo $str | awk -F'[()]' '{print $2" "$4" "$6" "$8}'

BTW:最近在使用delicious时发现添加在Opera工具栏中的“Bookmark on Delicious”挺方便:delicious,看了下这个工具栏按钮的属性,发现其实就是一段JS代码,就修改了一下做了个google当前网站的小工具:

JAVASCRIPT:
  1. javascript:(function(){s=window.location.href.split("//")[1].split("/")[0];f='http://www.google.com/search?hf=en&newwindow=1&q=+'+encodeURIComponent('site://'+s);a=function(){if(!window.open(f,'deliciousuiv5','location=yes,links=no,scrollbars=no,toolbar=no'))location.href=f+'jump=yes'};if(/Firefox/.test(navigator.userAgent)){setTimeout(a,0)}else{a()}})()

分类: Python, 编程相关      
cocobear写于08年08月18日09点27分

导出百度搜藏cang2html

百度搜藏有不少问题,其中一个就是不能导出。

因为电脑丢了以前浏览器里的书签都没了,不过在百度测试搜藏的时候我用自己浏览器里的书签试过,刚好里面还有旧一点的书签,今天突然想起这事打算把把书签导出来,没想到竟然没有这个功能,今天没什么事就自己写了个工具,可以导出百度的搜藏,只需要手动确定用户名,程序里可以指定导出时使用的标签,因为没有登录,所以需要先把你所有的书签设置为公开:

PYTHON:
  1. [cocobear@cocobear cang]$ cat cang.py
  2. [cocobear@cocobear cang]$ cat cang.py
  3. #!/usr/bin/env python
  4. #encoding=utf-8
  5. #Using GPL v2
  6. #Author: cocobear.cn@gmail.com
  7.  
  8. import urllib2,urllib,cookielib,httplib
  9. import sys,re
  10. import gzip,StringIO
  11.  
  12. user    = "cocobear_cn"         #user whose bookmarks you want get
  13. tag     = "from cang2html"      #tag that you want to mark
  14. id      = 0
  15. def cang2html(name,url,description):
  16.     global user
  17.     file_name = user+".html"
  18.     f = open(file_name,"a")
  19.     f.write("\t<dt><a HREF=\""+url+"\">"+name+"</a>\n")
  20.     if description:
  21.         f.write("\t<dd>"+description+"</dd>\n")
  22.     f.close()
  23.  
  24. def cang2adr(name,url,description):
  25.     global user,id
  26.     file_name = user+".adr"
  27.     f = open(file_name,"a")
  28.     f.write("#URL\n")
  29.     f.write("\tID="+str(id)+"\n")
  30.     f.write("NAME="+name+"\n\t"+"URL="+url+"\n")
  31.     if description:
  32.         f.write("\tDESCRIPTION="+description+"\n")
  33.     f.close()
  34.     id+=1
  35.  
  36. def process_data(data):
  37.  
  38.     result = re.findall("((?:http|ftp|https|file)://.*)\" target.*lnk\d+\">(.+?).*dc\d+\">(.*?)",data)
  39.     #print len(result)
  40.     for url,name,description in result:
  41.         #print name,url,description
  42.         cang2html(name,url,description)
  43.         cang2adr(name,url,description)
  44.  
  45. def get_data(user,opener,page):
  46.     url = "http://cang.baidu.com/"+user+"/page/"+str(page)
  47.     gziped_data = opener.open(url).read()
  48.     gziped_stream = StringIO.StringIO(gziped_data)
  49.     data = gzip.GzipFile(fileobj=gziped_stream).read()
  50.     return data.decode('gbk').encode('utf-8')
  51.  
  52.  
  53. def init():
  54.     httplib.HTTPConnection.debuglevel  =  1
  55.     cookie = cookielib.CookieJar()
  56.     opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
  57.  
  58.     exheaders = [("User-Agent","Opera/9.27 (X11; Linux x86_64; U; en)"),("Connection","Keep-Alive"),("Referer","http://cang.baidu.com"),("Accept","text/html, application/xml;q=0.9, application/xhtml+xml, */*;q=0.1"),("Accept-Charset","iso-8859-1, utf-8, utf-16, *;q=0.1"),("Cookie2","$Version=1"),("Accept-Encoding","deflate, gzip, x-gzip, identity, *;q=0"),]
  59.  
  60.     opener.addheaders = exheaders
  61.     urllib2.install_opener(opener)
  62.     return opener
  63.  
  64.    
  65. def create_adr_file(name):
  66.     global tag,id
  67.  
  68.     f = open(name,"w")
  69.     f.write("""Opera Hotlist version 2.0
  70. Options: encoding = utf8, version=3
  71. """)
  72.     f.write("#FOLDER\n")
  73.     f.write("\tID="+str(id)+"\n")
  74.     id+=1
  75.     f.write("\tNAME="+tag+"\n")
  76.     f.close()
  77.  
  78. def create_html_file(name):
  79.     global tag
  80.  
  81.     f = open(name,"w")
  82.     f.write("""<!DOCTYPE NETSCAPE-Bookmark-file-1>
  83. <meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
  84. <!--This is an automatically generated file.
  85. It will be read and overwritten.
  86. Code write by cocobear with Python
  87. Edit the file carefully!-->
  88. <title>Generated by cang2html</title>
  89. """)
  90.     f.write("<h1>"+tag+"</h1>\n")
  91.     f.write("<dl><p>\n")
  92.     f.close()
  93.  
  94. def end_html_file(name):
  95.    
  96.     f = open(name,"a")
  97.     f.write("</p></dl><p>\n")
  98.     f.close()
  99.  
  100. def main(argv=None):
  101.     global user,tag
  102.    
  103.     opener=init()
  104.     data = get_data(user,opener,1)
  105.     match = re.search("(共(\d+)条)",data)
  106.     if match:
  107.         total = int(match.group(1))
  108.     else:
  109.         print "User has no bookmars!"
  110.         return 1
  111.     print "Total %d bookmarks" % total
  112.     print "Start getting ......"
  113.  
  114.     create_html_file(user+".html")
  115.     create_adr_file(user+".adr")
  116.  
  117.     process_data(data)
  118.     if total % 10 != 0:
  119.         for i in range(1,10):
  120.             if (total+i) % 10 == 0:
  121.                 total+=i
  122.     total/=10
  123.  
  124.     for i in range(2,total+1):
  125.         data = get_data(user,opener,i)
  126.         #print "process %d" % i
  127.         process_data(data)
  128.  
  129.     end_html_file(user+".html")
  130.     #end_adr_file(user+".adr")
  131.  
  132.     print "Success!\nLook %s.html for your bookmarks" % user
  133.     print "Success!\nLook %s.adr for your bookmarks" % user
  134.  
  135.  
  136. if __name__ == "__main__":
  137.     sys.exit(main())

该程序可以把百度搜藏导出为Opera使用的adr格式书签,以及html格式的书签,可以方便导入Opera浏览器,以及delicious(de.licio.us)等网上书签。

代码下载
?: 运算符表示“查找子模式的匹配字符串,但不包括反向引用中的匹配结果”
.*是贪婪匹配
.*?非贪婪匹配

分类: Linux      
cocobear写于08年08月15日17点57分

处理了下网站

改了info域名后网站以前里很多页面里有cocobear.cn,连一些图片也显示不出来,今天就处理了一下:

把网站里一些文件做替换,先备份一下:
grep cocobear.cn ./cocobear.info/ -R -l --binary-files=without-match|xargs -i cp --parents {} bk/

然后全部替换:
grep cocobear.cn ./cocobear.info/ -R -l --binary-files=without-match | xargs sed -i 's/cocobear\.cn[^@]/cocobear\.info/g'

剩下就是数据库里的内容了,主要是wp_posts表中的post_content字段,还有guid字段,还有wp_comments中的comment_author_url,wp_postmeta中的meta_value;
操作的命令是:
mysql> update wp_posts set post_content=replace(post_content,"http://www.cocobear.cn","http://cocobear.info");

当然在进行数据库操作时一定要记得先备份一下:
mysqldump -h mysql.1g50.cn -u cocobear -p cocobear > 0808151.sql

使用 mysqldump -h mysql.1g50.cn -u cocobear -p cocobear < 0808151.sql恢复似乎不太好,还是进mysql里使用source ~/0808151.sql进行恢复。

分类: Linux      
cocobear写于08年08月14日15点02分

crontab使用[转载]

名称 : crontab
使用权限 : 所有使用者
使用方式 :
crontab file [-u user]-用指定的文件替代目前的crontab。
crontab-[-u user]-用标准输入替代目前的crontab.
crontab-1[user]-列出用户目前的crontab.
crontab-e[user]-编辑用户目前的crontab.
crontab-d[user]-删除用户目前的crontab.
crontab-c dir- 指定crontab的目录。
crontab文件的格式:M H D m d cmd.

M: 分钟(0-59)。
H:小时(0-23)。
D:天(1-31)。
m: 月(1-12)。
d: 一星期内的天(0~6,0为星期天)。
cmd要运行的程序,程序被送入sh执行,这个shell只有USER,HOME,SHELL这三个环境变量
说明 :
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

参数 :
crontab -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
crontab -r : 删除目前的时程表
crontab -l : 列出目前的时程表
crontab file [-u user]-用指定的文件替代目前的crontab。
时程表的格式如下 :
f1 f2 f3 f4 f5 program
其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推
使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。

例子 :
#每天早上7点执行一次 /bin/ls :
0 7 * * * /bin/ls
在 12 月内, 每天的早上 6 点到 12 点中,每隔3个小时执行一次 /usr/bin/backup :
0 6-12/3 * 12 * /usr/bin/backup
周一到周五每天下午 5:00 寄一封信给 alex@domain.name :
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"
20 0-23/2 * * * echo "haha"
注意 :
当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可

例子2 :
#每天早上6点10分
10 6 * * * date
#每两个小时
0 */2 * * * date
#晚上11点到早上8点之间每两个小时,早上8点
0 23-7/2,8 * * * date
#每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点
0 11 4 * mon-wed date
#1月份日早上4点
0 4 1 jan * date
范例
$crontab -l 列出用户目前的crontab.

来自:http://h1yn.itpub.net/post/2084/222108

分类: Python, 编程相关      
cocobear写于08年08月11日16点42分

再发个Python的小脚本

很多时候我们会遇到类似这样的字符串“%E5%8F%AF%E5%8F%AF%E7%86%8A”,如果你稍有经验就应该知道这是URL编码的汉字.

URL编码的产生是因为在URL只有少量的字符可以被使用:
"...Only alphanumerics [0-9a-zA-Z], the special characters "$-_.+!*'()," [not including the quotes - ed], and reserved characters used for their reserved purposes may be used unencoded within a URL."

这里有一篇介绍URL编码的文章。

为了方便把“%E5%8F%AF%E5%8F%AF%E7%86%8A”这样的字符串转换为我们可读字符串,我写了这个小工具;同时可以做反向的转换。例如把"可可熊"转换为“%E5%8F%AF%E5%8F%AF%E7%86%8A”。

做个示例,使用该程序在命令行下获取“\”的URL编码:
[cocobear@cocobear sn]$ ./url2read.py -r ""'\'""
GBK:
%5C
UTF8:
%5C

注意这里由于存在shell的解释,需要这样把“\”围起来。

这个脚本可以很好的在Linux与Windows下使用,贴代码:

PYTHON:
  1. #!/usr/bin/env python
  2. #coding: utf-8
  3. #author:        cocobear
  4. #version:       0.1
  5.  
  6. import urllib
  7. import sys,getopt,re
  8. __doc__ = """Usage:
  9.            ./url2read.py -h
  10.            ./url2read.py -r ftp://cocobear.info/中国
  11.            ./url2read.py http://cocobear.info/%E4%B8%AD%E5%9B%BD
  12.        """
  13.  
  14. def url2read(s):
  15.  
  16.     s = urllib.unquote(s)
  17.     try:
  18.             s = s.decode('utf-8')
  19.     except UnicodeDecodeError:
  20.             s = s.decode('gbk')
  21.     finally:
  22.             print s.encode(sys.stdin.encoding)
  23.  
  24.  
  25. def read2url(s):
  26.     head = ''
  27.     g = re.search('^(http|ftp://)(.*)',s)
  28.     if g:
  29.         head = g.group(1)
  30.         s = g.group(2)
  31.     gbk = urllib.quote(s.decode(sys.stdin.encoding).encode('gbk'))
  32.  
  33.     utf8 = urllib.quote(s.decode(sys.stdin.encoding).encode('utf-8'))
  34.     if gbk == utf8:
  35.         print head+gbk
  36.         return 0
  37.     else:
  38.         print "UTF8:\n"+head+utf8
  39.         print "GBK:\n"+head+gbk
  40.         return 0
  41.  
  42. def main(argv=None):
  43.     f = False
  44.     if len(sys.argv) <2:
  45.         print __doc__
  46.         return 1
  47.     try:
  48.         opts,args = getopt.getopt(sys.argv[1:],"h,r",["help","reverse"])
  49.     except getopt.error,msg:
  50.         print msg
  51.         print __doc__
  52.         return 1
  53.     for o,a in opts:
  54.         if o in ("-h","--help"):
  55.             print __doc__
  56.             return 0
  57.         if o in ("-r","--reverse"):
  58.             f = True
  59.     for arg in args:
  60.         if f:
  61.             return read2url(arg)
  62.         else:
  63.             return url2read(arg)
  64.    
  65.    
  66. if __name__ == "__main__":
  67.     sys.exit(main())

代码下载

分类: Python, 生活, 编程相关      
cocobear写于08年08月11日13点03分

Python做的小工具

在网页里查话费很麻烦,又要输入验证码,好多时候还会出现:“为了更好保护您的手机信息需再登录验证”,查个余额也要点好多下,就写了这个小工具,因为要识别验证码所以就有了前面那篇文章,其实难度也就在前面了,剩下的用Python来做很是方便;
代码就不贴了,使用一个配置文件sn.conf来保存用户名,密码;

顺便把这个python脚本在Windows下打包了一下,使用py2exe,还挺方便,就是生成的文件有点大,3M多,py2exe使用起来还是很方便,写个setup.py就行了:

PYTHON:
  1. from distutils.core import setup  
  2. import py2exe  
  3. import sys
  4.  
  5. includes = ["encodings", "encodings.*"]  
  6. if len(sys.argv) == 1:
  7.     sys.argv.append("py2exe")
  8. options = {"py2exe":  
  9.         {   "compressed": 1,  
  10.             "optimize": 2,  
  11.             "includes": includes,  
  12.             "bundle_files": 1  
  13.         }  
  14.     }  
  15. setup(      
  16.         version = "0.1.0",  
  17.         description = "hack sn chine mobile",  
  18.         name = "sn",  
  19.         options = options,  
  20.         zipfile=None,  
  21.         console=[{"script": "Data.py","script": "Pic_Reg.py","script": "sn.py", "icon_resources": [(1, "sn.ico")] }],    
  22.  
  23.     )

用命令python setup.py就可以生成一个独立的exe文件。

代码
BWT:还以为电脑丢了以前写的那个mario代码也没了,不过发现俺以前已经传到我的网站里了,是个打包好的Windows版
不过还是有不少东西丢了,包括写的一些代码。

分类: Linux      
cocobear写于08年08月7日17点28分

Fedora 8配置Heartbeat

Heartbeat是http://linux-ha.org中HA项目的核心,HA是(High Availability)的缩写;简单来说就是为了提供高可靠的应用服务,例如拿两来机子来做HA,提供WEB服务,一台机子为主服务器平时提供WEB服务,HA就是保证在主服务器出现故障(例如掉电)的时候另一台机子可以立刻接手继续提供WEB服务,从而使用户觉得服务未曾中断;实际应用中可能使用更多的机子组成集群。

Heartbeat可以使用串口或者以太网来实现对主机的监测,这里使用的是以太网,在两台机器上分别配双网卡,用一根双绞线把两台机器连接在一起,另外两个网卡连到路由;配置是:

f801(主机名;使用这台作为主服务器):
eth0: 192.168.1.110
eth1: 10.0.0.1

f802:
eth1: 192.168.1.111
eth2: 10.0.0.2

网络配置好后测试无误后再检查两台机器上的WEB服务是否可以正常使用;一切都正常后使用yum安装Heartbeat:

yum install heartbeat

安装好heartbeat后开始配置,三个主要配置文件都在: /usr/share/doc/heartbeat-2.1.3/下面,需要我们手工修改后拷贝到/etc/ha.d/中(两台服务器使用的脚本基本一样)。

编辑authkeys文件,下面的配置使用了sha1作为认证方式(这里需要注意的是该文件的权限必须被设置为600):

auth 2
#1 crc
2 sha1 HI!
#3 md5 Hello!

编辑ha.cf,注释下掉以下内容:

keepalive 1 ##设定心跳(监测)时间时间为1秒
warntime 10 ##设定警告时间
deadtime 30 ##设定确定主机宕机时间
initdead 120 ##第一宕机时间
ucast eth1 10.0.0.2 ##使用eht1做心跳监测 也就是连接两PC的网卡
udpport 694 ##使用udp端口694 进行心跳监测
node f801 ##节点1,必须要与 uname -n得到的结果一致。
node f802 ##节点2
第二台服务器由于网卡是eth(192.*)1,eth2(10.*),所以相应的配置文件中ucast 需要使用eth2。

编辑haresources,添加以下内容:

f801 192.168.1.118 httpd
表示主服务器使用192.168.1.118作为WEB服务的IP,f801为主服务器。

配置好后在主服务器上启动Heartbeat:
service heartbeat start
出错的话一般是配置文件的问题,根据提示修改就可以了;Heartbeat会自动根据haresource配置文件启动相应的服务程序。
然后在另一个台器上启动Heartbeat;

完成后可以使用tcpdump来测试两台机器间的心跳:

[root@f801 ~]# tcpdump -i eth0 -p udp port 694
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
11:43:46.431448 IP ha01.filenet-nch > ha02.ha-cluster: UDP, length 219
11:43:46.433968 IP ha01.filenet-nch > ha02.ha-cluster: UDP, length 216
11:43:47.431456 IP ha01.filenet-nch > ha02.ha-cluster: UDP, length 216
11:43:48.432516 IP ha01.filenet-nch > ha02.ha-cluster: UDP, length 216

如果这里出问题的话很有可能是防火墙的问题,或者是配置文件里ucast里的设置,需要仔细检查。
最后就可以做测试,关闭主服务器,根据配置文件里的响应时间(),服务器f802会接管主服务器的任务。

参考文章:
http://www.bitscn.com/linux/network_manage/200805/140501_3.html
http://www.xxlinux.com/linux/article/network/app/20070329/8009.html

分类: Python, 编程相关      
cocobear写于08年08月4日16点59分

使用Python进行验证码识别

以前写过一个刷校内网的人气的工具,Java的(以后再也不行Java程序了),里面用到了验证码识别,那段代码不是我自己写的:-) 校内的验证是完全单色没有任何干挠的验证码,识别起来比较容易,不过从那段代码中可以看到基本的验证码识别方式。这几天在写一个程序的时候需要识别验证码,因为程序是Python写的自然打算用Python进行验证码的识别。

以前没用Python处理过图像,不太了解PIL(Python Image Library)的用法,这几天看了看PIL,发现它太强大了,简直和ImageMagic,PS可以相比了。(这里有PIL不错的文档)
由于上面的验证码是24位的jpeg图像,并且包含了噪点,所以我们要做的就是去噪和去色,我拿PS找了张验证码试了试,使用PS滤镜中的去噪效果还行,但是没有在PIL找到去噪的函数,后来发现中值过滤后可以去掉大部分的噪点,而且PIL里有现成的函数,接下来我试着直接把图像转换为单色,结果发现还是会有不过的噪点留了下来,因为中值过滤时把不少噪点淡化了,但转换为音色时这些噪点又被强化显示了,于是在中值过滤后对图像亮度进行加强处理,然后再转换为单色,这样验证码图片就变得比较容易识别了:

pic
pic1

上面这些处理使用Python才几行:

PYTHON:
  1. im = Image.open(image_name)
  2.     im = im.filter(ImageFilter.MedianFilter())
  3.     enhancer = ImageEnhance.Contrast(im)
  4.     im = enhancer.enhance(2)
  5.     im = im.convert('1')
  6.     im.show()

接下来就是提取这些数字的字模,使用shell脚本下载100幅图片,抽出三张图片获取字模:

PYTHON:
  1. #!/usr/bin/env python
  2. #encoding=utf-8
  3.  
  4. import Image,ImageEnhance,ImageFilter
  5. import sys
  6.  
  7. image_name = "./images/81.jpeg"
  8. im = Image.open(image_name)
  9. im = im.filter(ImageFilter.MedianFilter())
  10. enhancer = ImageEnhance.Contrast(im)
  11. im = enhancer.enhance(2)
  12. im = im.convert('1')
  13. #im.show()
  14.                 #all by pixel
  15. s = 12          #start postion of first number
  16. w = 10          #width of each number
  17. h = 15          #end postion from top
  18. t = 2           #start postion of top
  19.  
  20. im_new = []
  21. #split four numbers in the picture
  22. for i in range(4):
  23.     im1 = im.crop((s+w*i+i*2,t,s+w*(i+1)+i*2,h))
  24.     im_new.append(im1)
  25.  
  26. f = file("data.txt","a")
  27. for k in range(4):
  28.     l = []
  29.     #im_new[k].show()
  30.     for i in range(13):
  31.         for j in range(10):
  32.             if (im_new[k].getpixel((j,i)) == 255):
  33.                 l.append(0)
  34.     &nb