python中字符串转换成字典、列表、元组

1.json.loads()

字典样式的或者列表样式的字符串可以直接使用json.loads转换

import json
# 字符串转字典
a = '{"key":"value","key2":"value2"}'
b = json.loads(a)
print(b)

# 字符串转列表
a = '["key","value","key2","value2"]'
b = json.loads(a)
print(b)

2.eval()函数

eval() 函数也可以用来转换字符串,而且字典,列表,元组样式的都可以转

# 转成字典
a = '{"key":"value","key2":"value2"}'
b = eval(a)
print(type(b))
print(b)

<class 'dict'>
{'key': 'value', 'key2': 'value2'}


# 转成列表
a = '["key","value","key2","value2"]'
b = eval(a)
print(type(b))
print(b)

<class 'list'>
['key', 'value', 'key2', 'value2']


# 转成元组
a = '("key","value","key2","value2")'
b = eval(a)
print(type(b))
print(b)

<class 'tuple'>
('key', 'value', 'key2', 'value2')

但是eval() 函数的功能主要是用来执行一个字符串表达式,并返回表达式的值。

a = '1+1+1'
b = eval(a)
print(type(b))
print(b)

<class 'int'>
3

# eval()函数中的字符串会执行

而且eval()函数有一定的危险性:

a = "__import__('os').system('XXX')"
# 如果输入恶意字符串就可以利用执行系统命令,操作文件、删除文件等等操作

 

3.ast.literal_eval()

因为eval()函数的危险性,于是引出literal_eval()函数

literal_eval()会判断需要计算的内容计算后是不是合法的python类型,如果是则进行运算,否则就不进行运算。

import ast
a = ast.literal_eval('1 + 1')
print(a)

2

# 如果使用ast.literal_eval()执行危险操作都会拒绝执行并报错,大大降低系统的危险性
a = "__import__('os').system('XXX')"
ast.literal_eval(a)

4.都不能满足要求

如果字符串是:

a = '[(\'key\',\'__import__(\'os\').system(\'ls\')\'),(\'key2\',\'open(xxx).read()\')]'

虽然ast.literal_eval()是安全的,不会执行里面的危险字符串,但是会报错而不会返回结果

而又需要把字符串转换,所以不能满足要求,只能自己解析

b_list = []
a_str = '[(\'key\',\'__import__(\'os\').system(\'ls\')\'),(\'key2\',\'open(xxx).read()\')]'
str_h = a_str[1:-1]
temp_list = str_h.split('),(')
for p in temp_list:
    pp = p.replace('(', '').replace(')', '').replace('\'', '')
    kv_array = pp.split(',')
    b_list.append(tuple(kv_array))
print(type(b_list))
print(b_list)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值