常用操作
1 | # 字符判断 |
查找与替换
1 | # startswith |
时间处理
1 | # 简单的获取时间: |
编码问题
2中打印str显示前面加了个u且中文类似\u8be5\u9879:这是十六进制的Unicode编码,使用
string.encode('utf-8')
进行转换2中类似\uiahd\u9483这样的字符串:需要注意的是,该字符串本来就是这样,而不是编码成这样的,这时候需要反编码:
string.decode('unicode_escape'))
2中无法输出中文: 无论是
str
还是unicode
还是encode('utf-8')
都无法输出中文,可以试试在print的时候不带括号:print a
,但是print一个对象依然不行,可以单独打印某个字段无法解析\u2c这样的unicode字符,出现错误
UnicodeDecodeError: 'unicodeescape' codec can't decode bytes in position 0-3:truncated \uXXXX escape
: 原因是unicode默认是\uxxxx这样的形式来解析字符串的,但是如果出现\u2c
这种,是解析不了的,应该写成\u002c
这种形式,前面需要补全UnicodeDecodeError: ‘ascii’ codec can’t decode byte: 可以试试
unicode(string, 'utf-8)
url编码 Python3中,url编码放在了url lib.parse中了
1
2
3
4
5
6
7
8
9
10
11# python3
from urllib import parse
parse.quote(str) # urlencode
parse.quote_plus(str)
parse.unquote(str) # urldecode
parse.encode() # 把字典转换为query的方式
# python2
urllib.urlencode(dict)
urllib.quote(str)
urllib.unquote(str) # urldecodebytes to string/字节转字符串
1
b"abcde".decode('utf-8')
string to bytes/字符串转字节
1
str.encode("abcfc")
将字符串输出为16进制字节:
1
2
3
4":".join("\{:02x\}".format(ord(x) for x in 字符串))
# 或
":".join("\{0:x\}".format(ord(x) for x in 字符串))
# 输出类似于: 12:45:4516进制转换为utf-8 :类似
\xe5\x94\xae\
这种,使用如下方式进行转换1
2
3
4
5
6
7# 方法一
unicode(string, 'utf-8')
# 方法二
a = u'xb3\xe5'
b = array('u', a).tostring()[::2].decode('gbk')
print(b)base64编码和解码
1
2
3import base64
a = base64.b64encode(s)
b = base64.b64decode(a)gb2312字符串转换为utf-8
1
data.encode('latin1').decode('gb2312')
大端/小端
Python使用
struct.pack和struct.unpack
来将数据封装成大端/小端的字节流,例如struct.pack('>h',14)
表示将14封装成大端模式查看字符编码
1
2import chardet
chardet.detect(string)
TroubleShooting
“TypeError: Unicode-objects must be encoded before hashing”
原因是在3.x中,md5方法仅接受unicode编码过后的字符串:
1
hashlib.md5(string.encode('utf-8')).hexdigest()