我正在阅读.txt文件并尝试捕获关键字:___ 。某些文本文件具有该模式,而其他文件则不具有该模式。使用** if *语句,如果文件中不存在该模式,我想提取结果或指示“未找到”。但是我明白了
matchcomp = re.search(r'关键字:([[^,] *)(,| $)',text1).group(1).strip() AttributeError:“ NoneType”对象没有属性“ group”
请帮助...
import re,os
os.chdir('C:\Users\dul\Dropbox\Article')
def extract_data(filename):
with open(filename, 'r') as file1:
text1=file1.read()
if matchcomp = re.search(r'Keywords:([^,]*)(,|$)', text1).group(1).strip():
return(matchcomp)
else:
return('not found')
with open('outfile.txt', "a+") as outfile:
outfile.write("\n"+matchcomp)
files = os.listdir("C:\Users\dul\Dropbox\Article")
for file in files:
if ".txt" in file:
extract_data(file)
答案 0 :(得分:1)
re.search
有时返回None
,因此您就无法再对其调用.group(1)
(因为它是None
)。
使用该搜索之前,您需要检查搜索结果。
类似的东西:
result = re.search(r'Keywords:([^,]*)(,|$)', text1)
if result is not None:
return(result.group(1).strip())
else:
return('not found')
答案 1 :(得分:0)
最近(著名的PEP 572)向python添加了赋值表达式。
(仅在Python 3.8中有效)
他们的用途之一是使您正在尝试的工作成为可能。
基本上将表达式内的=
替换为:=
。像这样:
if matchcomp := re.search(r'Keywords:([^,]*)(,|$)', text1) :
return(matchcomp.group(1).strip())
else:
return('not found')
采用该PEP对python的好处尚无定论。
但是,确实没有争议,它的后果 – resignation of Guido as BDFL –对于python来说很可怕。
在使用/享受此功能时,请考虑一下!
@Caboose建议所考虑的所有事情都是(恕我直言)走的路