作者丨小郭

今天师兄扔给我一个txt,说:“来,小郭,你把这个文本处理一下,按照指定字符分割成多个文本。”这下可难倒我了,不过好在功夫不负有心人,几经周折之后把它完成了。


python 按照行切割大文本文件_csv

先来看一下处理前的文本



python 按照行切割大文本文件_python 按照行切割大文本文件_02

处理后的文本



python 按照行切割大文本文件_python 按照行切割大文本文件_03

每个文本中的内容格式如下:



python 按照行切割大文本文件_python 按照行切割大文本文件_04

接下来详细介绍一下处理过程

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中数据预处理模块经常会用到,希望这篇文章对你有所帮助!加油,奥里给!

python 按照行切割大文本文件_正则表达式_05