我有一个图像数据集,描述了出现在特定图像中的不同活动。数据集中的每个图像都命名为<activity>_<num>
。例如educating_13.jpg
,practicing_147.jpg
等
现在,我想选择具有相同活动的图像,例如说“烹饪”,因此我决定使用Python中的re
模块进行此操作。我写的脚本就像
pattern = "^(\w+)_(\d+)$"
for filename in os.listdir("."):
root, _ = os.path.splitext(filename)
activity = re.match(pattern, root).group(1)
if activity == "cooking":
# do something
但是,即使成功处理了许多图像。最终它以AttributeError
中止了。似乎有些图像无法与指定的图案匹配。
那么我会犯一些错误吗?任何输入表示赞赏。
编辑:
通过在Python中使用异常机制,结果证明近15万张图像中有一个名为temp.txt
的文本文件,这是违反模式的文件。
答案 0 :(得分:3)
不使用正则表达式。使用str.split
例如:
for filename in os.listdir("."):
root, _ = os.path.splitext(filename)
if "_" in root:
activity, num = root.split("_")
if activity == "cooking":
# do something
答案 1 :(得分:1)
re.match(pattern, root)
如果不匹配,则可以返回None
re.match(pattern, root) == None
的结果并找到图片https://regex101.com/
检查图像名称的正则表达式答案 2 :(得分:1)
如果re.match(pattern, root)
为None,则调用.group(1)
将给您属性错误。因此,在某些情况下,您似乎无法匹配目录中的所有条目。
很难知道哪些问题给您带来了麻烦,但是默认情况下,\w
仅与[a-zA-Z0-9_]
相匹配,因此:
您可以发布目录列表,然后也许我们可以找到文件。