我正在参加「掘金·启航计划」
如何使用Python实现恢复被拆分的名字?
朋友在将文本文件中的姓名显示在公告栏时发现姓名被拆分的”七零八落”。读取的姓名列表如下:
['刘玄德、司马懿、诸葛亮\n', '、张飞、刘表、鲁肃、马\n', '谡、袁绍、吕阿蒙、公孙\n','瓒\n']
(图3)
存在如下问题
-
问题一:列表中共有4个元素,每个元素后面都存在换行符’\n’;
-
问题二:“诸葛亮”后面的顿号被读取到后一个元素中;
-
问题三:“马谡”被拆分到两个元素;
-
问题四:“公孙瓒”被拆分到两个元素。
产生问题的原因主要是,默认状态下,数据信息以不分行的形式保存到文本文件中(图1)。
为方便查看,在保存文件时我们经常设置为分行保存(图2)。
readlines命令读取文本文件时,文件会被输出为以换行符为分割点的多元素列表(图3)。
(图1)
(图2)
(图3)
解决这类问题的核心是将读取的列表转变为字符串,然后去除字符串中的换行符即可。步骤如下:
第一步: 将列表元素输出为字符串。
lst_s = ['刘玄德、司马懿、诸葛亮\n', '、张飞、刘表、鲁肃、马\n', '谡、袁绍、吕阿蒙、公孙\n','瓒\n']
str_s = ''.join(lst_s)
第二步:去除字符串中的换行符号"\n"。
str_w = str_s.replace('\n','')
完成以上两个步骤,前面遇到的四个问题就可以全部解决了。
为方便今后工作中引用,我把以上步骤整理为一个函数,供大家参考。
def l2s (lst_s):
global var
str_w = ''.join(lst_s).replace('\n','')
var = StringVar()
var.set(str_w)
下面用一个完整实例测试一下。代码如下:
from tkinter import *
root = Tk()
l2s(lst_s)
root.geometry('760x200')
lb = Label(root,textvariable=var,font=(2))
lb.pack(side=LEFT, ,padx=36)
root.mainloop()