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编码问题