計算返回單、雙位元組字元混合字串長度

pinpang發表於2021-02-05

計算返回單、雙位元組字元混合字串長度

#!/usr/bin/env python3
import re


p = re.compile('[^\x00-\xff]+')  # 提取雙位元組字元的正則模板
# p = re.compile('[\x00-\xff]+')  # 提取單位元組字元的正則模板


def realLength(s):
    '''計算返回單、雙位元組混合字串的位元組長度,便於格式化輸出'''
    dualByteNum = len(''.join(p.findall(s)))
    singleByteNum = len(s) - dualByteNum
    return (dualByteNum, singleByteNum, dualByteNum*2 + singleByteNum)


if __name__ == "__main__":
    sample = '中文字元, english在這裡'
    print(f"例1:樣本{sample!r}, 直接取字串長度: {len(sample)}; "
          f"雙位元組長度{{}}, 單位元組長度{{}}, 總長度{{}}。"
          f"\n".format(*realLength(sample)))    # 用兩種格式化方法組合完成格式化

    # 很好的用途在下面, 期望右對齊
    print("例2: ")
    src = ['abcde', "中文字串", 'abdcefghijk', "短中文", 'hun混he合']
    for s in src:
        print(f'{s:>20}')               # 參差不齊
    print()
    for s in src:
        cLength, _, _ = realLength(s)
        print(f'{s:>{20-cLength}}')     # f-string 還支援巢狀

TIPS: 在生成.xls, .xlsx等檔案時,可以通過這個函式計算單元格內容的位元組長度並據此調整列寬度。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章