最近在爬日文小说的过程当中,常常遇到全角(甚至和和半角混用),形成我(强迫症)强烈不适,就着手专门写一个脚本处理之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)的状况,我时不时能遇到一些比较奇怪的全角数字,好比⑩ ⑽ ⒑ Ⅻ,这里也一并处理了code
1 . 某些状况下全角反而是更好的选择,好比文件名,其不能用*:/等符号,全角就更适合,固然这属于另外一个话题,就不在此展开
2 . 罗马数字的状况,在现有的全角字符中罗马数字仅到12,若是某位(丧心病狂的)做者用了多个罗马数字的话,好比ⅩⅤ,上面的脚本就不合适了(就转成105),这时候须要先对整个字符串进行处理,找到链接在一块儿的罗马数字,而后计算并替换,这更像是数据清洗的范畴,也不展开多说了字符串