作者丨小郭
今天师兄扔给我一个txt,说:“来,小郭,你把这个文本处理一下,按照指定字符分割成多个文本。”这下可难倒我了,不过好在功夫不负有心人,几经周折之后把它完成了。
先来看一下处理前的文本
处理后的文本
每个文本中的内容格式如下:
接下来详细介绍一下处理过程
1.读取文本及指定分割的字符
inputfile = input('Input SourcFile:') ##输入源文件,如A.txt
fp = open(inputfile, 'r',encoding="UTF-8")
number =[] #用来存放指定分割字符所在行数
lineNumber = 1
keyword = input('Slice Keyword:') ##输入你要切分的关键字
outfilename = input('Outfilename:')##输出文件名,如out.txt则写out即可,后续输出的文件是out0.txt,out1.txt...
2.寻找指定分割字符,打印所在行数
count = 0 #记录文件所有行数
for index, line in enumerate(fp):
count += 1
m=re.search(keyword,line)
print(m)
if m is not None:
number.append(index)
print(number)
print(count)
- re.search
- 扫描整个字符串,并返回第一个成功的匹配。如果匹配失败,则返回None。
re.search(pattern, string, flags=0)
- pattern : 正则中的模式字符串。
- string : 要被查找替换的原始字符串。
- flags : 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等
- 针对文本的中用到的search函数测试结果如下:
3.截取内容读入新文本
for i in range(0,len(number)-1):
start = number[i]
print(start)
end = number[i+1]
print(end)
destLines = linecache.getlines(inputfile)[start+1:end] #将行号为start+1到end-1的文件内容截取出来
fp_w = open(outfilename + str(i)+'.txt','w',encoding="utf-8") #将截取出的内容保存在输出文件中
for key in destLines:
fp_w.write(key)
fp_w.close()
- 如果不确定自己打印的内容行数,可以将行数先输出
结语
在编写代码的过程中文本编码格式老报错,格式费了半天劲才搞懂是怎么回事,记得文本txt的编码格式是UTF-8才能被顺利读取。文本的切分在NLP中数据预处理模块经常会用到,希望这篇文章对你有所帮助!加油,奥里给!