1.提取txt文本
我想要的文本是如图所示,宝可梦的外貌描述文本,由于原本的数据源结构并不是很稳定,而且也不是表格形式,因此在csdn上查了半天。
最原始的一行一行提取(不建议,未采用)
fi = open("D:\python_learning\data\data\Axew.txt","r",encoding="utf-8")
wflag =False #写标记
newline = [] #创建一个新的列表
for line in fi : #按行读入文件,此时line的type是str
if "=" in line: #重置写标记
wflag =False
if "原型剖析" in line: #检验是否到了要写入的内容
wflag = True
continue
if wflag == True:
K = list(line)
if len(K)>1: #去除文本中的空行
for i in K : #写入需要内容
newline.append(i)
strlist = "".join(newline) #合并列表元素
newlines = str(strlist) #list转化成str
print(newlines)
"""
for D in range(1,100): #删掉句中()
newlines = newlines.replace("({})".format(D),"")
for P in range(0,9): #删掉前面数值标题
for O in range(0,9):
for U in range(0, 9):
newlines = newlines.replace("{}.{}{}".format(P,O,U), "")
fo.write(newlines)
fo.close()
fi.close()
"""
源代码为:将提取出的txt文本储存到另外一个txt中,跟我的需求不符合,因此注释掉了
正则表达式提取
由于txt文件打开后不是数据格式,因此先转为列表形式(一行是一个元素);再将列表元素合到一起,转为一个元素。
re.compile函数可以创建正则函数
pattern= re.compile(r’=栖息地=\n(.*?)\n==’, flags=re.DOTALL)
flags=re.DOTALL 这样找寻文本时可以跨行;
’=栖息地=\n(.*?)\n==’ 正则表达式表示只要小括号里面的以‘=栖息地=\n’开头,‘\n==’结尾的所有文本
pattern.findall函数可以在文本中找到符合正则函数的文本,但是莫名其妙会重复好多次,这个问题应该是我哪里写错了,但是因为实在没空纠结这个,所以直接用result=pattern.findall(f2)[0]来提取第一个。
path='D:\\python_learning\\data\\data\\'+df.iloc[0,3]+'.txt'
#为循环做准备
import re
f1=list(open(path,"r",encoding="utf-8"))#列表格式
f2="".join(f1