今天,跟大家分享一下我做小项目时想出来的文本字符处理的方法,希望能对大家有所帮助。
完整代码:
strings = "我,是‘C|S;D|N!的:程【序】员#M,r&.;P’a#n?_&学?狂"#将字符串设置好
def String_Process(string):#定义一个字符处理函数,设置参数string,是有待处理的字符串。
print("python使我快乐!!")
print("未处理的字符串:",string)
varchar = '‘’“”:#,!【】,&#|?|,&;;?:"'#人为设定字符集合
ls = []#定义一个列表用于存储拆散的字符
for s in string:
ls.append(s)#将字符串拆散存进列表中
for element in ls:
if element in varchar:#如果在字符集合内发现,则从列表中删除
ls.remove(element)
String = ''#定义字符串
for l in ls:#将列表中拆散的元素组合回去。
String = String+l
print("处理后的字符串:",String)#得到处理结果
String_Process(string=strings)#调用函数,传入实参给形参。
运行结果,如下图:
对于处理文本字符的思想在代码中已经说明,关于代码的解释在注释中也写出了。我们把它通过函数进行封装,当我们需要处理文本字符的时候,通过调用函数就可以实现文本字符处理了。当然,调用函数处理字符时需要得到string返回值以及注释掉print,因为我们如果是在循环中调用,没必要全部打印一遍,影响视觉对文本的分析。即修改代码如下图:
对于上面的文本处理代码,我又做了一次更新,可以增加新的字符或者是字符串来更新字符集合,更加方便处理文本中的字符。
改进后的代码,如下图:
strings = "我,是‘C|S;D|N!的:程【序】员#M,r&.;②P’「(a#n」?_&学?狂..."#将字符串设置好
def Process(string):#定义一个字符处理函数,设置参数string,是有待处理的字符串。
print("python使我快乐!!")
print("未处理的字符串:",string)
varchar = '‘’“”:#,!【】,&#|?|,&;;?:"'#人为设定字符集合
var_ls = []
for var in varchar:
var_ls.append(var)
print("这是当前的字符集合:",var_ls)
while True:
want = str(input("是否需要增加新的字符/字符集合?(yes or no)"))
if want == 'yes':
add_varchar = str(input("请输入需要增加的新字符/字符集合:"))
for var in add_varchar:
var_ls.append(var)
print("更新后的字符集合:",var_ls)
elif want == 'no':
break
else:
print("输入有误!!请重试!!")
continue
ls = []#定义一个列表用于存储拆散的字符
for s in string:
ls.append(s)#将字符串拆散存进列表中
for element in ls[:]:
if element in var_ls:#如果在字符集合内发现,则从列表中删除
ls.remove(element)
elif element not in var_ls:
continue
String = ''#定义字符串
for l in ls:#将列表中拆散的元素组合回去。
String = String+l
print("处理后的字符串:",String)#得到处理结果
Process(string=strings)#调用函数,传入实参给形参。
代码的解释在注释中写了,大家如果对代码不理解可以和我私信探讨。
运行结果,如下图:
我仔细思考后,又研究出了新的文本处理方法,这方法对大家处理文本字符更加友好。因为,我们只需要将文本的路径输入进去,函数就会自动将我们不需要的字符剔除掉,代码如下图:
def Text_Process():
import os
file_path = input("请输入要处理的文件绝对路径:")
ls = []
for f in file_path:#拆分字符串存进列表中
ls.append(f)
while True:
if '\\' in ls:#如果列表中存在转义符
number = ls.index('\\')
ls[number] = '/'#将转义符替换成/
else:#直到路径中的转义符被替换完毕
break
file = ''
for element in ls:
file += element#输出文件的路径
return file#返回文件
def String_Process(string):#定义一个字符处理函数,设置参数string,是有待处理的字符串。
#print("未处理的字符串:",string)
varchar = '‘’“”:#,!【】,&#|?|,&;;?:"" ".。、!/~-——+=_'#人为设定字符集合
var_ls = []
for var in varchar:
var_ls.append(var)
#print("这是当前的字符集合:",var_ls)
ls = []#定义一个列表用于存储拆散的字符
for s in string:
ls.append(s)#将字符串拆散存进列表中
for element in ls[:]:
if element in var_ls:#如果在字符集合内发现,则从列表中删除
ls.remove(element)
elif element not in var_ls:
continue
String = ''#定义字符串
for l in ls:#将列表中拆散的元素组合回去。
String = String+l
return String
#print("处理后的字符串:",String)#得到处理结果
#String_Process(string=strings)#调用函数,传入实参给形参。
def main_function():
file = Text_Process()
with open(r'{}'.format(file),'r+',encoding='utf-8') as f:
lines = f.readlines()
for l in lines:
line = l.strip()
string = String_Process(line)
print(string)
if __name__ == '__main__':
main_function()
未处理的文本,路径和文本内容,如下图:
运行结果,如下图:
大家可以看见,我直接将文件的绝对路径复制过来,文本的字符就自动处理好了。不过,这里还有一点没有完善,就是添加新的字符,进行奇葩字符的处理。只能手动复制奇葩字符到var_ls列表中,等有时间我考虑重构这些处理函数,写成一个类,这样应该就能够更加方便地处理文本了。
最后,感谢大家前来观看鄙人的文章,文中或有诸多不妥之处,还望指出和海涵。