python数据类型之字符串(二)

基础详见上篇文章:https://www.cnblogs.com/gaofeng-01/p/16787492.html
字符串相关题目
 
1、字符串反转
str1 = 'abc'

# 方式一:通过切片反转
print(str1[-1::-1])

# 方式二:先将字符串转换为列表,最后将列表转为字符串
lst1 = list(str1)
lst1.reverse()
print(''.join(lst1))

# 方式三:直接将字符串反转为一个迭代器对象,最后使用join将其连接为字符串
ite = reversed(str1)
print(''.join(ite))

# 此处扩展一个小知识点:reverse只能操作列表;reversed不仅限于列表,它返回的是迭代器对象

 

2、去除字符串空格
str1 = ' ab c '

# 方式一:使用replace替换
print(str1.replace(' ', ''))

# 方式二:使用strip()剔除首位空格;缺陷,无法剔除中间的空格
print(str1.strip())

# 方式三:使用split切割成列表+join连接
print(''.join(str1.split(' ')))

 

3、输入字符串,打印奇数位上的字符
str1 = 'abcdefg' 
print(str1[1::2]) # 思路:使用切片中的步长,每隔2个走一步,取出的就都是奇数

 

4、字符串转换为列表
import ast

str1 = 'abc bdf'
# 方式一:使用list()内置方法转换
print(list(str1))

# 方式二:使用字符串切割函数split
print(str1.split())

# 方式三:列表推导式
print([str_seq for str_seq in str1])

# 方式四:literal_eval强转,literal_eval强转会自动识别双引号中的数据类型
str2 = "['abc']"
print(ast.literal_eval(str2))

 

5、字符串和字典转换
import json
import ast
import json.decoder

# ①json字符串转字典:用json.loads()
# ②字典字符串转字典:用ast.literal_eval()
# ③既是json字符串又是字典字符串转字典:json.loads()和ast.literal_eval()都可使用

# 字典字符串。字典:不认null、true、false
str0 = "{'a': None, 'b': True, 'c': False}"
str1 = "{'a': '1', 'b': 1}"

# json字符串。json:不认单引号、None、False、True
str2 = '{"a": null, "b": false, "c": true}'
str3 = '{"a": {"a1": null}, "b": [null, 1]}'

# json字符串,字典字符串
str4 = '{"a": 1, "b": "2"}'

# 如果用json.loads()编码字典字符串会报错
try:
    res1 = json.loads(str0)
    res1_1 = json.loads(str1)
except json.decoder.JSONDecodeError as e:
    print('错误:str0和str1不是json字符串,使用json.loads()报错')
    print('正确:字典字符串转字典{}\n字典字符串转字典{}'.format(ast.literal_eval(str0), ast.literal_eval(str1)))

# 如果用ast.literal_eval()编码json字符串会报错
try:
    res2 = ast.literal_eval(str2)
    res2_1 = ast.literal_eval(str3)
except ValueError as e:
    print('错误:str2和str3不是字典字符串,使用ast.literal_eval()报错')
    print('正确:json字符串转字典{}\njson字符串转字典{}'.format(json.loads(str2), json.loads(str3)))

# ④字典转json字符串:用json.dumps()
dict1 = {'a': None, 'b': True, 'c': False}
print('字典转json字符串{}'.format(json.dumps(dict1, ensure_ascii=False)))

 

 

5.1、字符串和字典转换扩展讲解-json.loads()和ast.literal_eval()

import json
import ast

# ########################################################json.loads()#########################################
# ########################################################json.loads()#########################################
"""json.loads()是将json字符串格式的数据转换为python中的对象字典数据格式!
如果不是json格式的数据传给json.loads()则会报错。记住json.loads()只认json格式的字符串!"""
# str0单引号里面的数据格式属于json格式,str0是json格式的字符串。所以json.loads()能将其转换为字典
str0 = '{"a": null, "b": false, "c": true}'

# str0单引号里面的数据格式不属于json格式,str0不是json格式的字符串,是字典格式的字符串。所以json.loads()无法将其转换为字典
# 此时可以考虑直接使用ast.literal_eval(),或者使用json.dumps(ast.literal_eval())将其转换为json格式的字符串
str1 = '{"a": None, "b": False, "c": True}'


# #######################################################json.dumps()##########################################
# #######################################################json.dumps()##########################################
"""json.dumps()是将python中对象转换为json字符串,如果对象是字典,则json.dumps()可将其转换为json格式的字符串!
如果对象不是字典,则返回的结果将不是json数据格式的字符串,只是单纯的无规则的字符串"""
str2 = {"a": None, "b": False, "c": True}
str3 = '{"a": null, "b": false, "c": true}'
print(json.dumps(str2))  # 对象是字典,所以能将str2转换成json格式的字符串
print(json.dumps(str3))  # 对象不是字典,所以str3的转换结果是无规则的字符串


# #######################################################ast.literal_eval()####################################
# #######################################################ast.literal_eval()####################################
"""ast.literal_eval()是将表达式右边的实例转化为python中可识别的数据格式,如字典,元组,列表等等
如果转换后的数据格式python识别不了,则会报错。"""
str5 = '{"a": null, "b": false, "c": true}'  # 去掉引号后的数据格式不是字典,在python中是不认可的。所以ast.literal_eval()报错
str6 = '{"a": None, "b": False, "c": True}'  # 去掉引号后的数据格式是字典,在python可识别。所以ast.literal_eval()可将其转换为字典


# json.dump() 将python中的对象转化成json储存到文件中
# json.load() 将文件中的json的格式转化成python对象提取

 

 
posted @ 2022-10-13 15:16  杰个就斯爱情o  阅读(46)  评论(0)    收藏  举报