首页 > 解决方案 > Python Regex 对象是否具有自省方法/属性?

问题描述

我在整理这段代码时遇到了令人沮丧的事情。我有一个包含 csv 和其他文件类型的 zip 文件。我想处理 csv 并排除不带 .csv 后缀的内容。

我在一组只有 1 个非 csv 文件的情况下不断收到此错误消息:

Traceback (most recent call last):
  File "test.py", line 41, in <module>
    check = p.search(x).group(0) if (type(p.search(x)) != 'NoneType') else 'None'
AttributeError: 'NoneType' object has no attribute 'group'

因为我无法检查正则表达式对象以查看它返回的内容,所以我只能查看错误消息。我对python(6个月)还比较陌生,所以我不知道这是新手错误还是什么。

编码:

p = re.compile('\.csv')

... processing using ZipFile ...

# prepare selections for csv
check = p.search(x).group(0) if (type(p.search(x)) != 'NoneType') else 'None'

if (check):
    #print(x + " " + str(p.search(x).group()))
    table = p.sub('', x)
    print(" ======= " + table + " ======= ")
    with zf.open(x) as csvfile:
        reader = csv.DictReader(csvfile)
        for row in reader:
            count = count + 1
            #print(row)
        print(x + " has " + Fore.RED + str(count) + Style.RESET_ALL + " rows of data")
else:
        print(x + " is not a csv file, so not processing.\n")

一切正常,除了最后一个文件,它是一个 pdf,描述了内容。这是最后一个文件,所以我可以忽略它,但我担心在正在处理的存档中可能具有更高级别的非 csv 的文件。

当我明确指示忽略非 csv 文件时,我担心为什么逻辑会给我带来不匹配的麻烦。

标签: pythonregex

解决方案


改变

check = p.search(x).group(0) if (type(p.search(x)) != 'NoneType') else 'None'

check = p.search(x).group(0) if (p.search(x) != None) else None

这会产生预期/期望的结果。

谢谢@user2357112-supports-monica

我的意思是,我知道我做错的事情是错误的,显然我忘记了。


推荐阅读