python 通过计算字节,明智地将str / bytes(py3)或str / unicode字符串(py2)截断到某个限制
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 通过计算字节,明智地将str / bytes(py3)或str / unicode字符串(py2)截断到某个限制相关的知识,希望对你有一定的参考价值。
# coding=utf-8
def trunc(s, limit, coding="UTF-8", postfix="..."):
'''
sensibly trunc a str/bytes(py3) or str/unicode string(py2) to some limit by counting bytes
'''
unicode_s = s.decode(coding) if type(s) == bytes else s
nums = (len(u.encode(coding)) for u in unicode_s)
sum, i = 0, 0
use_postfix = ""
for i,n in enumerate(nums):
if sum+n > limit:
use_postfix = postfix
break
else:
sum += n
return unicode_s[:i] + use_postfix
# py2
a = u"你好世界," * 100
trunc_a = trunc(a, 50)
print(trunc_a)
b = "你好世界," * 100
trunc_b = trunc(b, 50)
print(trunc_b)
c = u'你好上你你你你你好上海,好上海,好上海,好上海,好上海,海'.encode("gb2312")
trunc_c = trunc(c, 20, coding="gb2312", postfix=u"呃呃呃") # use unicode in py2 for postfix
print(trunc_c)
# py3
# a = "你好世界," * 100
# trunc_a = trunc(a, 50)
# print(trunc_a)
# b = bytes("你好世界," * 100, "UTF-8")
# trunc_b = trunc(b, 50)
# print(trunc_b)
# c = '你好上你你你你你好上海,好上海,好上海,好上海,好上海,海'.encode("gb2312")
# trunc_c = trunc(c, 20, coding="gb2312")
# print(trunc_c)
以上是关于python 通过计算字节,明智地将str / bytes(py3)或str / unicode字符串(py2)截断到某个限制的主要内容,如果未能解决你的问题,请参考以下文章
如何在python 3中有效地将原始字节写入numpy数组数据
如何以最佳性能明智地将右表中的列加入左列表
如何在 python 中明智地组合两个 numpy 数组元素?
如何明智地连接多个列表元素
python编码
python编码问题