python工具脚本: chinese_digit.py - 中文数字 转换为 阿拉伯数字

简介:

经常会有这种需要将中文数字如 “五千三百零一”,全角数字”12345”等等各种中文数字,转换成阿拉伯数字的场合。嘛,毕竟中文比较复杂,这种东西还是很发杂的。

下面这段代码来源于http://bbs.chinaunix.net/redirect.php?tid=1755895

但是这段代码有如下的BUG:

1、只能正确转换亿亿以下的数

2、”十万”等十之前没有个位数字的字符串转换错误

而且有如下不足:

1、不能转换大写中文(壹贰叁)和全角数字

2、不能转换电话号码(如 一零零五)

下面是一个修改过的python脚本,支持如上的所有特性,并修正了BUG

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/usr/bin/env python
# coding: utf-8
# author: binux([email protected])

dict ={u'零':0, u'一':1, u'二':2, u'三':3, u'四':4, u'五':5, u'六':6, u'七':7, u'八':8, u'九':9, u'十':10, u'百':100, u'千':1000, u'万':10000,
u'0':0, u'1':1, u'2':2, u'3':3, u'4':4, u'5':5, u'6':6, u'7':7, u'8':8, u'9':9,
u'壹':1, u'贰':2, u'叁':3, u'肆':4, u'伍':5, u'陆':6, u'柒':7, u'捌':8, u'玖':9, u'拾':10, u'佰':100, u'仟':1000, u'萬':10000,
u'亿':100000000}
def getResultForDigit(a, encoding="utf-8"):
if isinstance(a, str):
a = a.decode(encoding)

count = 0
result = 0
tmp = 0
Billion = 0
while count < len(a):
tmpChr = a[count]
#print tmpChr
tmpNum = dict.get(tmpChr, None)
#如果等于1亿
if tmpNum == 100000000:
result = result + tmp
result = result * tmpNum
#获得亿以上的数量,将其保存在中间变量Billion中并清空result
Billion = Billion * 100000000 + result
result = 0
tmp = 0
#如果等于1万
elif tmpNum == 10000:
result = result + tmp
result = result * tmpNum
tmp = 0
#如果等于十或者百,千
elif tmpNum >= 10:
if tmp == 0:
tmp = 1
result = result + tmpNum * tmp
tmp = 0
#如果是个位数
elif tmpNum is not None:
tmp = tmp * 10 + tmpNum
count += 1
result = result + tmp
result = result + Billion
return result

**完整版带测试用例的版本可以从这里获得:

** https://github.com/binux/binux-tools/blob/master/python/chinese_digit.py

测试用例来源于:http://fayaa.com/code/view/37/(不记得一开始在哪看到的了=。=)

python工具脚本:pprint.py 中文支持

这是一个支持unicode的pprint修改版本,来自http://groups.google.com/group/python-cn/browse_thread/thread/d881b328386ce396/e68057c8a7531326

默认使用pprint的时候,list, tuple, dict中的中文都显示成这个样子:

>>> from pprint import pprint
>>> pprint([‘中文字符串’, u’中文统一码字符串’, {‘中文键名’: ‘中文键值’, u’中文 unicode 键名’: u’中文unicode 键值’}])

[‘xe4xb8xadxe6x96x87xe5xadx97xe7xacxa6xe4xb8xb2’,
u’u4e2du6587u7edfu4e00u7801u5b57u7b26u4e32’,
{u’u4e2du6587 unicode u952eu540d’: u’u4e2du6587 unicode
u952eu503c’,
‘xe4xb8xadxe6x96x87xe9x94xaexe5x90x8d’:
‘xe4xb8xadxe6x96x87xe9x94xaexe5x80xbc’}]

修改之后会把字符串中文形式输出,而不是repr的形式:

>>> from pprint import pprint
>>> pprint([‘中文字符串’, u’中文统一码字符串’, {‘中文键名’: ‘中文键值’, u’中文 unicode 键名’: u’中文unicode 键值’}])

[‘中文字符串’,
u’中文统一码字符串’,
{u’中文 unicode 键名’: u’中文 unicode 键值’,
‘中文键名’: ‘中文键值’}]

太尴尬了,不挂代理被墙墙,挂VPN被google墙

一直在用eduvpn的代理,价格相对便宜,也差不多够用了。不过郁闷的是,不知道他们那些家伙拿这台VPN搞了什么,所有的google ape托管的服务,包括我自己的blog都被墙了=。=

Your client does not have permission to get URL / from this server. (Client IP address: 173.244.202.xx)

You are accessing this page from a forbidden country.

结果还是得IPV6啊。。真是麻烦。虽然尝试使用IPV6的DNS,但是这完全不能把*.appspot.com解析成ipv6地址嘛!

2001:470:20::2
74.82.42.42

结果还是改HOSTS:https://docs.google.com/Doc?docid=0ARhAbsvps1PlZGZrZG14bnRfNjFkOWNrOWZmcQ&hl=zh_CN

CssFullText - CSS选择器 说明

CSS Selector 简介:

CSS 选择器( css selector) 是CSS的灵魂。对于一个HTML页面来说,CSS选择器是方便的元素(element)选取工具。

支持的选择器类型:

  • 派生选择器 ( E F)
  • id 选择器 ( E#id )
  • 类选择器 ( E.class )
  • 属性选择器 ( E[attr=val] )

暂时不支持伪类选择器( E:last )。

选择器语法简介:

派生选择器

派生选择器用于根据元素的上下文关系定位元素。
HTML 代码:

<form>
  <label>Name:</label>
  <input name="name" />
  <fieldset>
      <label>Newsletter:</label>
      <input name="newsletter" />
 </fieldset>
</form>
<input name="none" />

选择器:form input
选择元素:<input name="name" />, <input name="newsletter" />

也可以使用子类选择器( E > F ),仅选择元素的子元素,而不会选取其孙子元素
对于以上代码, 选择器:form > input
选择元素:<input name="name" />

id 选择器

id 选择器用于选取特定id的元素。
HTML 代码:

<div id="notMe"><p>id="notMe"</p></div>
<div id="myDiv">id="myDiv"</div>

选择器:#myDiv
选择元素:<div id="myDiv">id="myDiv"</div>

类选择器

类选择器用于选取拥有特性class的元素。
HTML 代码:

<div class="notMe">div class="notMe"</div>
<div class="Me myClass">div class="Me myClass"</div>
<span class="myClass">span class="myClass"</span>

选择器:.Me
选择元素:<div class="Me myClass">div class="Me myClass"</div>

属性选择器

选择包含特定属性的元素,不支持在同一个选择器中使用多个属性选择器( span[hello=”Cleveland”][goodbye=”Columbus”] )
[attribute] 包含属性
[attribute=value] 属性等于特定值的元素
[attributevalue] 匹配给定的属性包含特定值的元素
[attribute!value] 匹配给定的属性不包含特定值的元素(not

[attribute|value] 匹配如”lang”属性中的en, en-US, en-cockney
[attribute^value] 匹配给定的属性以特定值开头的元素
[attribute$value] 匹配给定的属性以特定值结尾的元素
[attribute*value] 匹配给定的属性的值中包含给定的字符串
例子
参见:http://www.w3.org/TR/CSS2/selector.html#attribute-selectors

Gentoo PPTP VPN使用指南

安装

由于gentoo的”清凉化”解决方案没有提供图形化的pptp的配置方案的原因。。不得不手动配置pptp
gentoo下安装配置请参考http://en.gentoo-wiki.com/wiki/PPTP 。并且其提供了一个半自动化的pptp配置工具,不用手写配置文件了。。

使用

默认通过VPN访问网络

为了通过vpn上网,请在File: /etc/ppp/peers/my_vpn文件中添加:
defaultroute
即可默认通过VPN连接网络

自动修改路由

同时通过 http://code.google.com/p/chnroutes/ 这个项目生成vpnup和vpndown脚本,重命名成100-route.sh分别cp到/etc/ppp/ip-up.d/和/etc/ppp/ip-down.d/中,及可以使国内ip走国内线路,加快访问速度,又不影响翻墙。
不过这里有一个地方需要修改。由于上面我们通过defaultroute使得默认网关有两个,原先的vpnup无法找到默认网关,请手动修改vpnup中的OLDGW为你的网关。

能够Ping通网络,TCP连接无法访问

我在使用he.net的VPN时,pon连接上,改了路由之后能够ping通www.google.com,并且能够正常DNS。但是无法网页时一直超时(后来我才注意到状态一直是sending request)。。。。
查看了各种文档(http://pptpclient.sourceforge.net/howto-diagnosis.phtml#connections_freeze)确认是mtu过大造成。在/etc/ppp/peer/my_vpn文件中添加
mtu 1200
或通过ifconfig ppp0 mtu 1200测试到可用值,修改即可

Gentoo rtorrent IPV6 支持

问题:

gentoo中rtorrent连接ipv6 tracker的时候显示”Track :Couldn’t resolve host name”

解决:

既然是gentoo那么就用gentoo的emerge解决吧

  1. http://libtorrent.rakshasa.no/ticket/1111找对应版本的补丁(注意,补丁修改了多次,尽量使用最新的。第一个版本甚至无法编译通过)

  2. 将补丁下载到portage的目录

cd /usr/portage/net-libs/libtorrent/files
# 请使用最新版本的补丁
wget http://home.samfundet.no/~sesse/libtorrent-0.12.6-ipv6-07.patch
mv libtorrent-0.12.6-ipv6-07.patch libtorrent-0.12.6-ipv6.patch

cd ..
  1. 修改ebuild文件
src_prepare() {
    epatch "${FILESDIR}"/${P}-gcc44.patch
    epatch "${FILESDIR}"/${P}-ipv6.patch
    elibtoolize
}
  1. 重新生成签名, 重新emerge
ebuild libtorrent-0.12.6.ebuild digest
emerge libtorrent

同理修改rtorrent

cd /usr/portage/net-p2p/rtorrent/files
# 请使用最新版本的补丁
wget http://home.samfundet.no/~sesse/rtorrent-0.8.6-ipv6-07.patch
mv rtorrent-0.8.6-ipv6-07.patch rtorrent-0.8.6-ipv6.patch

cd ..




src_prepare() {
    epatch "${FILESDIR}"/${P}-canvas-fix.patch
    epatch "${FILESDIR}"/${P}-ipv6.patch
    elibtoolize
}




ebuild rtorrent-0.8.6.ebuild digest
ebuild rtorrent-0.8.6.ebuild merge

机器不好还是别玩gentoo了。。

受不了啊!!xserver编译4小时,装个chromium编译3小时,mplayer3小时。。。这也太费劲了。。

弄了几天,中文化,xserver,各种常用应用都弄好了,本来还打算弄点安装过程什么的 ,但是根据”you are not alone”原则,手册(http://www.gentoo.org/doc/zh_cn/index.xml)+google任何事情都能够解决了。
而且gentoo更多的是探索发现,不自己解决就没意义了。

嗯,不过还是有一些TIP的。。。

  1. emerge很强大,经常–search装软件很轻松

  2. emerge -pv 很好用,能看到将要执行的动作,方便查看版本、关联软件等信息

  3. 软件库其实很新,不过很多都被mask了,查看 文档 或者使用autounmask

  4. 编译的时候干点别的吧。。。

Gentoo初装

看着越来越绚丽的ubuntu,不知道我的T40 PM1.5的破本还能不能支撑得了。。找了一些轻量级桌面。但是弄个不安装x的ubuntu感觉好没意思啊。
于是趁机尝试下传闻中的gentoo好了。

首先,欢迎使用Gentoo。你将进入一个多选择和高性能的世界。Gentoo就意味着选择。当你安装Gentoo时,你将会清楚的了解到—-你能够选择怎样编译软件,如何安装Gentoo,以及使用哪种系统日志程序等等。

安装gentoo虽然需要一些linux基础,但是只要用过mount这样子的程度,照着Gentoo Linux x86手册还是没有什么问题的。

但是不同的是,您将获得一个自己亲手编译的内核(虽然是默认设置。。)和亲手安装的每一个软件(绝对不存在不知道干吗的软件存在)。
而这一切在Portage(gentoo的包管理器)的管理下,依赖关系什么都不用操心。

而且,比起装一个ubuntu,能清楚地看到安装程序都干了些什么。虽然麻烦,但是还是挺有成就感的。。
恩,下一步就是慢慢调教一个自己的应用环境~~

SyntaxHighlighter/HighSyntax themes - VIM desert

HighSyntaxThemesDesertDemo

前言

一直很喜欢vim的desert的配色,特别是它的comments天蓝色的配色,用了下SyntaxHighlighter的RDark也不是很满意。于是拿它改了一下。
顺便修改了以下边框,原来的第一行和边框上沿太接近了,于是给加了一行。。。

/**
 * Desert SyntaxHighlighter theme based on color scheme by Hans Fugal
 * http://www.vim.org/scripts/script.php?script_id=105
 * Modified by Binux (http://binux.appspot.com/) 2011.1.16
 */

根据vim color scheme desert修改而成。

使用方法

SyntaxHighlighter

1、下载css文件,更名为shThemeDesert.css
2、将css拷贝至styles目录,在页面中引用即可。

HighSyntax plugin for Micolog

1、下载css文件,更名为shThemeDesert.css
2、将css添加至micolog/plugins/highsyntax/syntaxhighlighter.zip压缩文件的styles目录中。
3、修改micolog/plugins/highsyntax/highsyntax.py,在54行添加高亮部分:

1
2
3
4
5
6
7
8
9
10
<select name="theme" id="theme">
<option value="Default">Default</option>
<option value="Django">Django</option>
<option value="Eclipse">Eclipse</option>
<option value="Emacs">Emacs</option>
<option value="FadeToGrey">FadeToGrey</option>
<option value="Midnight">Midnight</option>
<option value="RDark">RDark</option>
<option value="Desert">Desert</option>
</select>

3、在设置中启用即可

下载链接

http://binuximage.appspot.com/data/3001-shThemeDesert.css

还是没忍住。。BLOG再开

断断续续,乱七八糟,东写西写,也不知道开过多少个BLOG了。

以至和讯BLOG都放弃给我发[和讯管理员提醒:您好久没有回来了]的垃圾邮件了。

不过PYTHON的却是令人愉快的语言啊。。没事写写这,写写那,快速开始,快速结束。完全不像C++,不弄个模板都懒得写include这种麻烦的事情。

慢慢写了点东西,就忍不住记下来。。GAE也越来越方便,果然还是自己的地盘好啊。。没钱这样足够了。

1
2
3
4
5
6
7
8
def parse_args():
global args
parser = argparse.ArgumentParser(description='auto convect data dump by DotaHIT to xml')
parser.add_argument('FILE',
help="FILE to work with")
parser.add_argument('DIR',
help="path dump to")
args = parser.parse_args()

慢慢的迁移到Linux环境下,现在回到到Windows下,没有console各种不习惯啊。多么方便的命令,python脚本都没有。除了WOW和1080p硬解,哦还有QQ(因为要分析它的协议),真没什么好留恋的了

连两个基友舍友都跟着我Linux单系统了。。

wbuntu in durarara

虽然不知能坚持多久,不过就这样把:)