Python-从txt中获取所有带有书名号的内容,并去除重复内容

Python-从txt中获取所有带有书名号的内容,并去除重复内容

  • 文本预处理
    • ~~方法一(建议看方法二)~~
      • 1.读取文件+筛选出书名号内容
      • 2.存入新文档
      • 3.剔除重复内容+存文件
    • 方法二 用正则的方法可以一步到位

文本预处理

我需要做的是:读取txt文件,提取文本中所有带有书名号的内容,并存在一个txt文件里,做我的专有名词词典
1.读取txt文件
2.找出所有带有书名号的内容
3.提出所有重复的内容
4.存在新的txt文件中
更新了方法二,建议直接跳到方法二

方法一(建议看方法二)

1.读取文件+筛选出书名号内容

这个方法比较繁琐,可以看下一个代码块

TXTtemp = open("old_sentence.txt",encoding="utf-8")
txtbuffer = TXTtemp.read()

oldlist=[''] #list型
newlist=[''] #list型

#oldlist存放txt文档中的内容
oldlist=list(txtbuffer)
for index in range(len(txtbuffer)):
    if oldlist[index] == "《":
        #这里range中的数字是根据书名号中内容的长度改变的,写最大的即可
        #例如我的所有书名内容长度不超过50,我这里写的50
        for j in range(50):
            if oldlist[index+j] == "》":
                #我这里的“/nw"是因为我做NLP任务的需要
                #不需要的,删掉即可,更改为”》“
                newlist.append("》/nw")
                newlist.append("\n")
                j=0
                break
            newlist.append(oldlist[index+j])            
print(newlist)

Python-从txt中获取所有带有书名号的内容,并去除重复内容_第1张图片
可以看到我查找出来的内容,他是list类型,并且一个字一个字存放的,所以这个时候我没有做重复的剔除,是在稍后的步骤实现的。(因为是小白所以不太会,欢迎大佬指点更快捷的操作)

2.存入新文档

strlist = "".join(newlist) #strlist是str类型
txtnew = open("newtxt.txt","w")
txtnew.write(strlist)
txtnew.close()
TXTtemp.close()
print(strlist)

Python-从txt中获取所有带有书名号的内容,并去除重复内容_第2张图片
查看输出的内容,可以发现有很多重复的内容,所以接下来我要剔除重复的部分,现在strlist是str类型,稍后转成list可以一步到位剔除。

3.剔除重复内容+存文件

#打开新的文件
TXTtemp = open("newtxt.txt")
#readlines() 将读取的内容转成list型
txtbuffer = TXTtemp.readlines() #list类型
#set()可以直接剔除重复内容,但是处理后的文档顺序可能有变化,因为我不在意顺序,所以没有关注后续处理
txtbuffer = list(set(txtbuffer))
print(txtbuffer)
#重新存入原来的新文档
strlist = "".join(txtbuffer)
txtnew = open("newtxt.txt","w")
txtnew.write(strlist)
txtnew.close()
TXTtemp.close()
#完成!

Python-从txt中获取所有带有书名号的内容,并去除重复内容_第3张图片
可以看到就没有重复的内容啦!
总结一下代码需要修改的有哪些地方:

  • 文档地址;
  • 第1部分,range()括号中的数,取决于你书名号内容的最大长度;(这部分还有“》”后边的内容)
  • 有的可能还需要修改读取文件时解码的类型,encoding=“ ”

方法二 用正则的方法可以一步到位

import re
#读取文件
TXTtemp = open("old_sentence.txt",encoding="utf-8")
txtbuffer = TXTtemp.read()

#使用findall(),用正则找到所有的带书名号的内容
temp = re.findall("《.*?》",txtbuffer)
#剔除重复的
result = set(temp)
print(result)
#存入新文件
strlist = "".join(txtbuffer)
txtnew = open("newtxt.txt","w")
txtnew.write(strlist)
txtnew.close()
TXTtemp.close()

参考:

  • 6种在 Python 中从 List 中删除重复项的方法
  • Python学习12_python3.4.3实现txt文本指定字符提取

你可能感兴趣的:(python学习,python,开发语言)