重新搜索是否(如果有),但是“ nonetype对象没有属性'group'”

时间:2019-02-18 20:19:57

标签: python

我正在阅读.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)

2 个答案:

答案 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 572 discussion

法定(非技术性)警告

采用该PEP对python的好处尚无定论。
但是,确实没有争议,它的后果resignation of Guido as BDFL –对于python来说很可怕。

在使用/享受此功能时,请考虑一下!

@Caboose建议所考虑的所有事情都是(恕我直言)走的路