谈谈python字符分割性能问题

有个分析日志的小东西, 由于日志中有空格, 也有双引号隔开的内容,简单搜索下了,发现推荐用shlex.split来做分割,测试下,结果挺满意的,实际跑起来性能非常差

通过 kernprof -l -v 分析发现99%的时间都用在shlex.split上了, 所以偷懒是不行的了

这里建议用re正则表达式来做,比如腾讯云的日志

访问日志字段包括:请求时间、客户端IP、访问域名、文件路径、字节数、省份编码、运营商编码、HTTP状态码、referer、Request-Time、”UA”、”range”、HTTP Method、协议标识、缓存HIT/MISS、

p=re.compile(r'(\S*) (\S*) (\S*) (\S*) (\S*) (\S*) (\S*) (\S*) (\S*) (\S*) “([^”]*)” “([^”]*)” (\S*) (\S*) (\S*)$’)

p=re.compile(r'(\d*) (\S*) (\S*) (\S*) (\d*) (\S*) (\S*) (\d*) (.*) (\S*) “([^”]*)” “([^”]*)” (\S*) (\S*) (\S*)$’)
finddata = p.findall(dataline)

由于refer 中有可能有1个或者多个空格, 所以用(.*) 替代了(\S*), 20200527

这么操作的结果是42W行数据, 从8分钟下降到10秒作用

发表回复