python全角数字_用Python转换一些常见全角字符为半角

前言

最近在爬日文小说的过程中,经常遇到全角(甚至和和半角混用),造成我(强迫症)强烈不适,就着手专门写一个脚本处理之

思路

首先在网上寻找看是否已经有现成库/脚本能做到,寻找一番之后只找到一些思路文章,这里就不重复了

有一点要注意,不少文章里是python2的情况,里面用的是unichr函数,到python3就变成了chr函数

直接看代码吧

def SBC2DBC(char):

chr_code = ord(char)

# 处理全角中数字大等于10的情况

if chr_code in range(9312, 9332):

return str(chr_code - 9311)

elif chr_code in range(9332, 9352):

return str(chr_code - 9331)

elif chr_code in range(9352, 9372):

return str(chr_code - 9351)

elif chr_code in range(8544, 8556):

return str(chr_code - 8543)

else:

if chr_code == 12288: # 全角空格,同0x3000

chr_code = 32

if chr_code == 8216 or chr_code == 8217: # ‘’

chr_code = 39 # '

elif chr_code in range(65281, 65374):

chr_code = chr_code - 65248

return chr(chr_code)

def SBC2DBC_string(string):

new_string = ''

for char in string:

new_string += SBC2DBC(char)

return new_string

网上大部分文章里只有全角空格和range(65281,65374)的情况,我时不时能遇到一些比较奇怪的全角数字,比如⑩ ⑽ ⒑ Ⅻ,这里也一并处理了

扩展思考

1 . 某些情况下全角反而是更好的选择,比如文件名,其不能用*:/等符号,全角就更适合,当然这属于另一个话题,就不在此展开

2 . 罗马数字的情况,在现有的全角字符中罗马数字仅到12,如果某位(丧心病狂的)作者用了多个罗马数字的话,比如ⅩⅤ,上面的脚本就不合适了(就转成105),这时候需要先对整个字符串进行处理,找到连接在一起的罗马数字,然后计算并替换,这更像是数据清洗的范畴,也不展开多说了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值