顺序完全不是我想要的。
请问有什么方法吗?
用途主要是把我在网络上抓回来的小说章节组合成一个文件,章节用的是汉字的数字,而且有好几百,手工做的话感觉太傻了。。。
--
免费手机铃声电子书下载,在线观看!
尽在 http://www.honeyday.org
我用Python的列表的sort方法对一组以汉字数字命名的文件名进行排序的时候发现是按照汉字的汉语拼音的字母在英文字母表里的顺序进行排序的。
这就导致了:
我要获得下面这个结果
一.txt
二.txt
三.txt
四.txt
五.txt
六.txt
但是却得到了
二.txt
六.txt
三.txt
四.txt
五.txt
一.txt
顺序完全不是我想要的。
请问有什么方法吗?
用途主要是把我在网络上抓回来的小说章节组合成一个文件,章节用的是汉字的数字,而且有好几百,手工做的话感觉太傻了。。。
那你还是老老实实找个转阿拉伯数字的模块吧。
--
Best Regards,
Leo Jay
确实有。
完整的文件名是 <第四卷 第一百三十九章 飞天大虾(二).txt>
有很多地方有数字的。
以前写的Ruby代码,互转的,带测试用例,转成python应该不麻烦
用Ruby做中文数字和阿拉伯数字之间的互相转换 : http://www.fayaa.com/code/view/37/2008/7/18 马踏飞燕 <honey...@gmail.com>:
确实有。
完整的文件名是 <第四卷 第一百三十九章 飞天大虾(二).txt>
有很多地方有数字的。
#coding=UTF-8
#用途:把用汉字表示的数字转换为阿拉伯数字
#用法:cn2dig(汉字数字)
#作者:马踏飞燕<honey...@gmail.com>
#日期:2008-07-18
CN_NUM = {
u'〇' : 0,
u'一' : 1,
u'二' : 2,
u'三' : 3,
u'四' : 4,
u'五' : 5,
u'六' : 6,
u'七' : 7,
u'八' : 8,
u'九' : 9,
u'零' : 0,
u'壹' : 1,
u'贰' : 2,
u'叁' : 3,
u'肆' : 4,
u'伍' : 5,
u'陆' : 6,
u'柒' : 7,
u'捌' : 8,
u'玖' : 9,
u'貮' : 2,
u'两' : 2,
}
CN_UNIT = {
u'十' : 10,
u'拾' : 10,
u'百' : 100,
u'佰' : 100,
u'千' : 1000,
u'仟' : 1000,
u'万' : 10000,
u'萬' : 10000,
u'亿' : 100000000,
u'億' : 100000000,
u'兆' : 1000000000000,
}
def cn2dig(cn):
lcn = list(cn)
unit = 0 #当前的单位
ldig = []#临时数组
while lcn:
cndig = lcn.pop()
if CN_UNIT.has_key(cndig):
unit = CN_UNIT.get(cndig)
if unit==10000:
ldig.append('w') #标示万位
unit = 1
elif unit==100000000:
ldig.append('y') #标示亿位
unit = 1
elif unit==1000000000000:#标示兆位
ldig.append('z')
unit = 1
continue
else:
dig = CN_NUM.get(cndig)
if unit:
dig = dig*unit
unit = 0
ldig.append(dig)
#print ldig #uncomment this line to watch the middle var.
ret = 0
tmp = 0
while ldig:
x = ldig.pop()
if x=='w':
tmp *= 10000
ret += tmp
tmp=0
elif x=='y':
tmp *= 100000000
ret += tmp
tmp=0
elif x=='z':
tmp *= 1000000000000
ret += tmp
tmp=0
else:
tmp += x
ret += tmp
return ret
#ldig.reverse()
#print ldig
#print CN_NUM[u'七']
if __name__ == '__main__':
#just for test
test_dig = [u'二十一',
u'一百二十三',
u'一千二百零三',
u'一万一千一百零一',
u'十万零三千六百零九',
u'一百二十三万四千五百六十七',
u'一千一百二十三万四千五百六十七',
u'一亿一千一百二十三万四千五百六十七',
u'一百零二亿五千零一万零一千零三十八',
u'一千一百一十一亿一千一百二十三万四千五百六十七',
u'一兆一千一百一十一亿一千一百二十三万四千五百六十七',
]
for cn in test_dig:
print cn2dig(cn)
自己动手,丰衣足食!
我写了一个转换用的函数,贴上来分享一下:
#coding=UTF-8
#用途:把用汉字表示的数字转换为阿拉伯数字
#用法:cn2dig(汉字数字)
#作者:马踏飞燕<honey...@gmail.com>
#日期:2008-07-18
CN_NUM = {
u'〇' : 0,
u'一' : 1,
应该说成: 一千零二十四章
一零二四 的话就太简单了,每一位对应查表,然后按位连接就行了.
在 08-7-18,James liu<liupin...@gmail.com> 写道:
我贴新的进去,发现网站报错了.
http://www.fayaa.com/code/view/191/ 这个地址报错了,你看看.
在 08-7-18,realfun<rea...@gmail.com> 写道:
出错!
这个应该不算是正确的汉字数字表示法阿
应该说成: 一千零二十四章
一零二四 的话就太简单了,每一位对应查表,然后按位连接就行了.
Design Issue,晚上再改吧,当初设计的时候有个假设就是没人能删帖
结果自己刚才违反了这个原则....2008/7/18 马踏飞燕 <honey...@gmail.com>:我狂晕...
我刚写了一个评论... 一提交,发现你把原贴删了...
我贴新的进去,发现网站报错了.
http://www.fayaa.com/code/view/191/ 这个地址报错了,你看看.
这么说来你是将下载的章节进行排序吗?如果不考虑转换汉字,通过目录页面就可以知道顺序。
--
I like python!
UliPad <<The Python Editor>>: http://code.google.com/p/ulipad/
UliWeb <<simple web framework>>: http://uliwebproject.appspot.com
My Blog: (new)http://http://hi.baidu.com/limodou
(old)http://www.donews.net/limodou
确实,但是我为了偷懒,就用迅雷下的单个页面,回来后的顺序就乱了。
2008/7/18 Samuel Chi <princeofd...@gmail.com>:
这么多,何时能看完!>
>
> 2008/7/18 realfun <rea...@gmail.com>:
>>
>> 从来只看成品的:
>> 母皇
>> 罪恶(强烈推荐,Google"罪恶 刺岩卡")
>> 寻找人类
>
> 跟着跑:
> 冠军教父
> 人欲
> 猛兽记
> 史上第一混乱
> e轮回
> 顺便也推荐几个成品:
> 圣徒
> 历史的尘埃
>
在 08-7-19,Her0<react...@gmail.com> 写道: