Python(3)字符串的编码、长度、占

发布时间:2019-07-22 17:39:06编辑:auto阅读(1852)

    3、字符串和编码的转换

    1、转换单个字符为编码:

    ord(c)

    返回值可以认为是数字类型。

    foo = '中'
    print(ord(foo))     # 20013

    如果不止一个字符,则会报错

    2、转换单个字符的编码为字符

    chr(code)

    返回值是字符

    print(chr(20013))     # '中'

    3、用unicode方式输出字符

    \u十六进制编码

    例如,20013转为十六进制是4E2D

    print('\u4e2d')     # '中'

    4、将字符转为bytes形式的编码

    首先,当字符串前面有b时表示是bytes形式的编码。

    例如,b'\xe4\xb8\xad'表示文字。这个东西一般是需要进行网络传输,或者在硬盘上读写时使用的。

    str.encode(encoding=’UTF-8’,errors=’strict’)

    附个中文说明吧,找不到类似MDN这样的完善的说明网站。

    两个参数都可以省略,默认转为utf-8格式。其作用大致类似js里的encodeURI()方法,虽然我并不能完全肯定其是否一样。

    示例:

    foo = '中'.encode('utf-8')
    print(foo)  # b'\xe4\xb8\xad'

    5、从bytes形式的编码转回普通字符串

    属于上面的逆向行为。

    bytes.decode(encoding=”utf-8”, errors=”strict”)

    foo = b'\xe4\xb8\xad'.decode()
    print(foo)  # '中'

    4、字符串的长度

    len(o)

    参数是被检查的字符串。

    这个比较智能:

    1. 对普通字符串,返回其字符个数,例如len('中')的返回值是1(只有一个字符);
    2. 对于bytes形式的编码,返回其字节数。例如len(b'\xe4\xb8\xad')的返回值是3;
    3. 对于普通字符串,像\n这样的换行符或者其他转义字符,其长度视为1;
    4. 但假如字符串前面加了r(视为非转义字符),那么\n的长度则视为2;
    len('中')    # 1
    len(b'\xe4\xb8\xad')    # 3
    len('a\nb')    # 3
    len(r'a\nb')    # 4

    5、字符串的替换/占位符

    简单来说,占位符就是先占住一个固定的位置,然后用其他东西替换这个位置的内容。

    如果玩过c语言,那么应该很熟悉。

    标准占位符是:%d,注意是小写的,其他占位符也一样是小写。

    通用写法是:

    foo = '→%s←' % ('abc')
    print(foo)  # 箭头指向的地方被替换的→abc←

    占位符的数量和括号里的参数数量要一致,不然抛错

    因为上面只有一个占位符,所以括号可以省略。

    foo = '→%s←' % 'abc'
    print(foo)  # →abc←

    整数占位符(%d)

    参数可以是浮点数(小数)或整数,浮点数的话直接取整数位使用。

    foo = '%d' % (1.9)
    print(foo)  # 1

    整数占位符的补位写法:

    %和后面的d之间添加两个数字,可以表示补足到多少位内容和以什么字符来补。

    常见写法是补零,如示例:

    foo = '%03d' % 1
    print(foo)  # 001

    %后面跟的第一个是0,表示用0是补位内容;第二个字符开始至d之前的字符是3,表示补足到三位。

    具体来说,就是首先用1来替换%03d的位置,替换后结果是1

    然后发现第二个至d之间是3,表示要补足3位,即xx1这样。

    但这个x是什么呢?发现第一位是0,因此变成001,即结果。

    两种特殊情况:

    1. 假如被替换后超出三位,例如foo = '%03d' % 1234替换后结果是1234。这种情况不补位;
    2. 可以用其他填充么?答案是不行。

    浮点数占位符(%f)

    会把参数变为一个六位小数,然后替换。

    示例:

    foo = '%f' % 2.1234
    print(foo)  # 2.123400

    也可以只取几位小数,写法是 %f 之间加 . 和需要保留的位数。

    示例:

    foo = '%.2f' % 2.1234
    print(foo)  # 2.12

    另外需要注意,浮点数由于精确度问题,因此最后一位并不是四舍五入,也不是直接舍去后面的内容。

    这涉及到浮点数的存储问题,就不深谈了。

    转为十六进制(%x)

    很好理解,将数字转为十六进制

    foo = '%x' % 31
    print(foo)  # 1f

    另外提一下十六进制转为十进制的方法:

    foo = '1f'    # 这里需要是字符串
    print(int(foo, 16))  # 31

关键字