中文
luckfu的潦草笔记

最初的梦想绝对会到达!


  • 首页

  • 归档

  • 关于我

  • 公益404

  • 搜索

python 快速判断字符串是否包含中文

时间: 2022-06-21   |   分类: python   | 字数: 498 字 | 阅读: 1分钟 | 阅读次数:

事情是这样的,最近优化一个数据导出程序,数据库是UTF-8,要求导出文件编码为GBK,在python中,传统的写法:

xxx.decode('utf-8').encode('gbk','ignore')

但decode和encode在一个几千万行的文件导出时,耗时太长,粗略测试不做decode的导出,至少性能提高三倍,可这时会有新的问题出现,假如数据中有中文或别的编码文字,编码会出错。

我的思路是检查一下字符串,如果包含中文就进行encode,如果没有中文则直接写入,以此优化程序性能。

老程序是用python 2.7写的,python2的编码众所周知的蛋疼,但生产系统嘛,忍忍就过去了……

常见的解决方案:

import re
zhPattern = re.compile(u'[\u4e00-\u9fa5]+')

正则的方式耗时不会比decode后encode少

def chk_chinese(check_str):
    for ch in check_str:
        print(ch)
        if u'\u4e00' <= ch <= u'\u9fff':
            return True 
    return False

古早的 python 2.7 用不了

最后理了一下思路,其实并不需要取检查中文,命题应该是 “检查字符串中是否有非ascii字符”,毕竟只要有非ascii编码的字符,就需要转码操作

def chk_no_ascii(check_str):
    for ch  in check_str:
        if ord(ch)>127: return  True
    return False

但这样函数在输入字符串全是ascii码时,会遍历整个字符串,观察了下我这里的数据特性,一般中文字段,前3个字符中一定有中文存在,所以优化成 for ch in check_str[:6]

最终测试执行速度较源程序提升2倍

#python#

声明:python 快速判断字符串是否包含中文

链接:http://www.luckfu.com/post/2022-06-21_str_contain_chinese/

作者:luckfu

声明: 本博客文章除特别声明外,均采用 CC BY-NC-SA 3.0许可协议,转载请注明出处!

创作实属不易,如有帮助,那就打赏博主些许茶钱吧 ^_^
WeChat Pay

微信打赏

Alipay

支付宝打赏

paypal Pay

PayPal打赏

DBeaver 通过 wallet 连接 Oracle Free Cloud
用豆浆机做安心食用的豆腐脑(内酯或葡萄糖酸钙点卤)
  • 文章目录
  • 站点概览
luckfu

luckfu

一瞬间,过去的一切都离你而去,剩下的只有回忆!

31 日志
29 分类
41 标签
GitHub
标签云
  • 生活
  • Python
  • Oracle cloud
  • Free vps
  • Gpt
  • K8s
  • Vm.standard.a1.flex
  • Chatgpt
  • Github
  • Langchain
© 2010 - 2025 luckfu的潦草笔记
Powered by - Hugo v0.127.0 / Theme by - NexT
0%