[英]Regular expression for simple patterns
我有一個圖像數據集,描述了出現在特定圖像中的不同活動。 數據集中的每個圖像都命名為<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
的文本文件,這是違反模式的文件。
不使用正則表達式。 使用str.split
例如:
for filename in os.listdir("."):
root, _ = os.path.splitext(filename)
if "_" in root:
activity, num = root.split("_")
if activity == "cooking":
# do something
如果不匹配re.match(pattern, root)
可以返回None
re.match(pattern, root) == None
並找到圖像 https://regex101.com/
檢查圖像名稱的正則表達式 如果re.match(pattern, root)
為None,則調用.group(1)
將給您屬性錯誤。 因此,在某些情況下,您似乎無法匹配目錄中的所有條目。
很難知道哪個問題給您帶來了麻煩,但是默認情況下\\w
只匹配[a-zA-Z0-9_]
,因此:
您可以發布目錄列表,然后也許我們可以找到文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.