Pycharm提示:Expected type ‘optional[bytes]’ got ‘str’ instead
使用split类似函数的时候提示:Expected type ‘optional[bytes]’ got ‘str’ instead
row.split('\t')
并不影响运行,但是如果强迫症的话,可以改用下面的形式:
row.split(b'\t')
python字符串前面加u,r,b的含义
u/U
:表示unicode字符串,代表是对字符串进行unicode编码r/R
:非转义的原始字符串,转义字符不生效,常用于正则表达式b
:bytes,python3.x里默认的str是(py2.x里的)unicode, bytes是(py2.x)的str, b
b'\xe2\x82\xac20'.decode('utf-8') # byte 转 Unicode 字符串
# €20 对应 b'\xe2\x82\xac20'
'€20'.encode('utf-8') # unicode 字符串转 byte
Python字典读取 KeyError
在Python中,使用下标访问字典元素时,如果不知道是否存在 Key ,使用get代替,而且下标的字符串编码要一致,否则读不到数据。
dict = {'0':0, '1':1}
print(dict['3') # 报错
print(dict.get('3') # None
print(dict[0]) # 报错
print(dict.get(b'0')) #None
Python3 字符串类型 str 和字节类型字符串 b”互转
当提示错误:TypeError: must be str, not bytes,或者:TypeError: must be bytes, not str 时,需要对字符串进行转换:
str = 'str test'
bytes = b'byte test'
# str -> bytes
str.encode()
# bytes -> str
bytes.decode()
Python 字符串列表转为数字列表
当从文件中导入数据的时候,读取的是字符串,有时候我们需要把字符串进行分割,分割生存的列表是字符串数组,需要转化为数值数组。
str = '3,4,5,6'
record_list = str.split(',') # 此时得到的是:['3','4','5','6']
# 使用循环来进行转换
record_list = [int(x) for x in numbers]
# 使用map函数,用于Python2
record_list = map(int, record_list)
# 在Python3中使用map函数得到的是map对象,还需要转为list
record_list = list(map(int, record_list))
# 上面的 int 参数为转换的类型,还可以是float等
record_list = list(map(eval, record_list))