大家好,我是皮皮。
一、前言
前几天在Python白银交流群有个叫【大侠】的粉丝问了一个Python列表处理的问题,这里拿出来给大家分享下,一起学习下。
请教:如何读取保存一些list信息的txt,生成有一组名字有规律的list,如list1,list2,list3...

1[1,'西游记',''吴承恩',孙悟空','猪八戒','唐僧'] 2[2,'钢铁是怎样炼成的','奥斯特洛夫斯基','保尔柯察金','冬妮娅'] 3[3,'红楼梦',''贾宝玉',林黛玉] 4[4,'三国演义',''孔明',曹操','关羽','貂蝉'] 5
想处理成:
1list1=[1,'西游记',''吴承恩',孙悟空','猪八戒','唐僧'] 2list2=[2,'钢铁是怎样炼成的','奥斯特洛夫斯基','保尔柯察金','冬妮娅'] 3list3=[3,'红楼梦',''贾宝玉',林黛玉] 4list4=[4,'三国演义',''孔明',曹操','关羽','貂蝉'] 5
这个题目有点尴尬,不知道他具体的实际场景,但是目前就是要这么个效果。

二、解决过程
【dcpeng】解答
这里【dcpeng】给出了解答,纯粹往结果上靠。
1final_lst = [] 2with open("data.txt", 'r', encoding='utf-8') as f: 3 lines = f.readlines() 4 for i in range(1, len(lines)+1): 5 new_line = f"list{i} = " + lines[i-1] 6 print(new_line) 7 final_lst.append(new_line) 8 9with open('new_data.txt', 'w', encoding='utf-8') as f: 10 for data in final_lst: 11 f.write(data + '\n') 12

乍一看,确实是完成了任务,不过似乎没没有完成需求。

看似解决,还需优化。
【月神】解答
这里【月神】给了一个答案,用到了exec()函数,如下图所示:

【瑜亮老师】解答
这里【瑜亮老师】也给出了一个代码,也用到了exec()函数,如下所示:
1with open('shouju03.txt', 'r',encoding='utf-8') as f: 2 data = f.readlines() 3 4for k, v in enumerate(data): 5 value = eval(v) 6 exec(f"list_{k+1}={value}") 7print(list_1) 8print(list_2) 9print(list_3) 10print(list_4) 11

代码截图:

细心的小朋友们可能已经发现了,不论是【月神】还是【瑜亮老师】的代码截图里边,变量list1、list2、list3、list4打印的时候都带了红色的下划线,按说我们在pycharm中遇到红色下划线是报错的节奏,其实在这里并不是的,需要稍微注意一下。本质原因是exec()函数执行之后,是没有返回值的,所以在pycharm中找不到对应的值,会提示红色的下划线告警,但是实际上不是报错。与之对应的eval()函数是有返回值的,这点是它们两个内置函数最大的区别。
最后放个【瑜亮老师】的完整的代码:
1# txt文件内容如下: 2# list1=[1, '西游记', '吴承恩', '孙悟空', '猪八戒', '唐僧'] 3# list1=[2, '钢铁直男', '拖拉机', '保尔', '冬妮娅'] 4# list1=[3, '红楼梦', '贾宝玉', '林黛玉'] 5# list1=[4, '三国演义', '孔明', '诸葛亮', '军师', '中路法师'] 6 7with open('shouju03.txt', 'r',encoding='utf-8') as f: 8 data = f.readlines() 9print('下面是批量生成列表变量,并直接赋值') 10for k, v in enumerate(data): 11 # 这里使用字符串切片去除文件中每行前面多余的字符串 12 # 并调用eval方法把字符串变为列表 13 value = eval(v[6:]) 14 # 生成变量并赋值 15 exec(f"list_{k+1} = {value}") 16 # 直接调用变量,输出它的值 17 print(f"list_{k+1} = {value}") 18print('下面是直接调用变量') 19print('list_1 =', list_1) 20print('list_2 =', list_2) 21print('list_3 =', list_3) 22print('list_4 =', list_4) 23
这块还是蛮考验Python基础的,基础不牢,地动山摇!

三、总结
大家好,我是皮皮。这篇文章针对如何读取保存一些list信息的txt,生成有一组名字有规律的list的问题,给出了具体的解析和代码演示,帮助粉丝顺利解决了问题。
最后感谢粉丝【大侠】提问,感谢【dcpeng】、【瑜亮老师】、【月神】给出的具体解析和代码演示,感谢【黑脸怪】、【冫马讠成】、【猫药师Kelly】、【PI】等人参与学习交流。
小伙伴们,快快用实践一下吧!如果在学习过程中,有遇到任何问题,欢迎加我好友,我拉你进Python学习交流群共同探讨学习。
