每日一课 | 如何将字符串类型的列表还原成列表类型?

一、问题场景:利用岗位需求关键词,制作词云图。需要将一个个的小列表,合并成一个大列表

image.png

正常来讲打印这个each,从肉眼来看每个数据都是列表格式

然而 what?类型都是字符串格式(这就是字符串格式的列表)

print(type(each))
image.png

实际的效果:


image.png

想要的效果:


image.png

二、解决方案:

1、evel() 它的作用就是把数据还原成它本身或者是能够转化成的数据类型。

image.png

2、literal_eval() 作用同上

image.png

3、str
使用时注意列表追加改成append(将一个对象追加到列表中)extend(将一组对象追加到列表中)

image.png

最终结果:


image.png

eval和ast.literal_eval的区别

eval函数在python中做数据类型的转换还是很有用的。它的作用就是把数据还原成它本身或者是能够转化成的数据类型.下面来看看示例代码:

string <==> list

image.png

string <==> tuple

image.png

string <==> dict

image.png

也就是说,使用eval可以实现从元祖,列表,字典型的字符串到元祖,列表,字典的转换,此外,eval还可以对字符
串型的输入直接计算。比如,她会将'1+1'的计算串直接计算出结果。


image.png

从上面来看,eval功能可谓非常强大,即可以做string与list,tuple,dict之间的类型转换,还可以做计算器使用!更有甚者,可以对她能解析的字符串都做处理,而不顾忌可能带来的后果!所以说eval强大的背后,是巨大的安全隐患!!! 比如说,用户恶意输入下面的字符串

open(r'D://filename.txt', 'r').read()

__import__('os').system('dir')

__import__('os').system('rm -rf /etc/*')

那么eval就会不管三七二十一,显示你电脑目录结构,读取文件,删除文件.....如果是格盘等更严重的操作,她也会照做不误!!!

所以这里就引出了另外一个安全处理方式ast.literal_eval.可以先看下stackoverflow及Python官方关于这个解释!

stackoverflow

image.png

Python官方文档

image.png

简单点说ast模块就是帮助Python应用来处理抽象的语法解析的。而该模块下的literal_eval()函数:则会判断需要计算的内容计算后是不是合法的python类型,如果是则进行运算,否则就不进行运算。

比如说上面的计算操作,及危险操作,如果换成了ast.literal_eval(),都会拒绝执行。

报值错误,不合法的字符串!

image.png

而只会执行合法的Python类型,从而大大降低系统的危险性!

image.png

所以出于安全考虑,对字符串进行类型转换的时候,最好使用ast.literal_eval()函数!

希望本文的内容对大家的学习或者工作能带来一定的帮助,每天进步一点点,加油

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容