http://pycoders-weekly-chinese.readthedocs.org/en/latest/issue5/unipain.html
>>> "中国人"! ! ! ! ! # UTF-8 字符串 (Linux 系统默认)。 '\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba' >>> type(s), len(s) <type 'str'>, 9 >>> u"中国人"!! ! ! ! # 使用 u 前缀定义 UNICODE 字符串。 u'\u4e2d\u56fd\u4eba' >>> type(u), len(u) <type 'unicode'>, 3 >>> "a" + "b" 'ab' >>> "a" * 3 'aaa' >>> ",".join(["a", "b", "c"])! ! ! ! ! # 合并多个字符串。 'a,b,c' >>> "a,b,c".split(",")! ! ! ! ! ! # 按指定字符分割。 ['a', 'b', 'c'] >>> "a\nb\r\nc".splitlines()! ! ! ! ! # 按行分割。 ['a', 'b', 'c'] >>> "a\nb\r\nc".splitlines(True)!! ! ! ! # 分割后,保留换行符。 ['a\n', 'b\r\n', 'c'] >>> "abc".startswith("ab"), "abc".endswith("bc")! ! # 判断是否以特定子串开始或结束。 True, True >>> "abc".upper(), "Abc".lower()!! ! ! ! # ⼤大小写转换。 'ABC', 'abc' >>> "abcabc".find("bc"), "abcabc".find("bc", 2)! ! # 可指定查找起始结束位置。 1, 4 >>> " abc".lstrip(), "abc ".rstrip(), " abc ".strip()! # 剔除前后空格。 'abc', 'abc', 'abc' >>> "abc".strip("ac")! ! ! ! ! ! # 可删除指定的前后缀字符。 'b' >>> "abcabc".replace("bc", "BC")!! ! ! ! # 可指定替换次数。 'aBCaBC' >>> "a\tbc".expandtabs(4)!! ! ! ! ! # 将 tab 替换成空格。 'a bc' >>> "123".ljust(5, '0'), "456".rjust(5, '0'), "abc".center(10, '*')! # 填充 '12300', '00456', '***abc****' >>> "123".zfill(6), "123456".zfill(4)! ! ! ! ! ! # 数字填充 '000123', '123456'
>>> s = "中国人"; s '\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba' >>> u = s.decode(); u! ! ! # UTF-8 -> UNICODE u'\u4e2d\u56fd\u4eba' >>> gb = s.encode("gb2312"); gb! ! # UTF-8 -> GB2312 '\xd6\xd0\xb9\xfa\xc8\xcb' >>> gb.encode("utf-8")! ! ! # encode 会把 gb 当做默认 UTF-8 编码,所以出错。 UnicodeDecodeError: 'utf8' codec can't decode byte 0xd6 in position 0: invalid continuation byte >>> gb.decode("gb2312")! ! ! # 可以将其转换成 UNICODE。 u'\u4e2d\u56fd\u4eba' >>> gb.decode("gb2312").encode()!! # 然后再转换成 UTF-8 '\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba' >>> unicode(gb, "gb2312")!! ! # GB2312 -> UNICODE u'\u4e2d\u56fd\u4eba' >>> u.encode()! ! ! ! # UNICODE -> UTF-8 '\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba' >>> u.encode("gb2312")! ! ! # UNICODE -> GB2312 '\xd6\xd0\xb9\xfa\xc8\xcb' >>> import sys, locale>>> sys.getdefaultencoding()! ! # Python 默认编码。'ascii' >>> c = locale.getdefaultlocale(); c! # 获取当前系统编码。('zh_CN', 'UTF-8') >>> reload(sys)! ! ! ! # setdefaultencoding 在被初始化时被 site.py 删掉了。<module 'sys' (built-in)> >>> sys.setdefaultencoding(c[1])!! # 重新设置默认编码。 decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串转换成unicode编码。 encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串转换成gb2312编码。
codecs编码转换,大小端和BOM
>>> from codecs import BOM_UTF32_LE >>> s = "中国⼈人" >>> s '\xe4\xb8\xad\xe5\x9b\xbd\xe4\xba\xba' >>> s.encode("utf-32") '\xff\xfe\x00\x00-N\x00\x00\xfdV\x00\x00\xbaN\x00\x00' >>> BOM_UTF32_LE '\xff\xfe\x00\x00' >>> s.encode("utf-32").decode("utf-32") u'\u4e2d\u56fd\u4eba'
Python 提供了两种字符串格式化方法,除了熟悉的 C 样式外,还有更强大的 format。 %[(key)][flags][width][.precision]typecode 标记:- 左对齐,+ 数字符号,# 进制前缀,或者用空格、0 填充 >>> "%(key)s=%(value)d" % dict(key = "a", value = 10) ! # key 'a=10' >>> "[%-10s]" % "a"!! ! ! ! ! ! # 左对齐 '[a ]' >>> "%+d, %+d" % (-10, 10)! ! ! ! ! # 数字符号 '-10, +10' >>> "%010d" % 3! ! ! ! ! ! ! # 填充 '0000000003' >>> "%.2f" % 0.1234!! ! ! ! ! ! # ⼩小数位 '0.12' >>> "%#x, %#X" % (100, 200)! ! ! ! ! # 十六进制、前缀、大小写。 '0x64, 0XC8' >>> "%s, %r" % (m, m)! ! ! ! ! ! # s: str(); r: repr() 'test..., <__main__.M object at 0x103c4aa10>'
使用format
format 方法支持更多的数据类型,包括列表、字典、对象成员等。 {field!convertflag:formatspec} 格式化规范: formatspec: [[fill]align][sign][#][0][width][.precision][typecode] >>> "{key}={value}".format(key="a", value=10)!! # 使用命名参数。 'a=10' >>> "{0},{1},{0}".format(1, 2)! ! ! ! # field 可多次使用。 '1,2,1' >>> "{0:,}".format(1234567)! ! ! ! # 千分位符号 '1,234,567' >>> "{0:,.2f}".format(12345.6789)! ! ! # 千分位,带小数位。 '12,345.68' >>> "[{0:<10}], [{0:^10}], [{0:*>10}]".format("a")! # 左中右对齐,可指定填充字符。 '[a ], [ a ], [*********a]' >>> import sys >>> "{0.platform}".format(sys)! ! ! ! # 成员 'darwin' >>> "{0[a]}".format(dict(a=10, b=20))! ! ! # 字典 '10' >>> "{0[5]}".format(range(10))! ! ! ! # 列表 '5' >>> from string import letters, digits, Template >>> letters! ! ! ! ! ! ! ! ! # 字⺟母表 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' >>> digits! ! ! ! ! ! ! ! ! # 数字表 '0123456789' >>> Template("$name, $age").substitute(name = "User1", age = 20)! # 模板替换。 'User1, 20' >>> Template("${name}, $age").safe_substitute(name = "User1") ! # 没找到值,不会抛出异常。 'User1, $age'