簡體   English   中英

更正python正則表達式以創建double dict

[英]Correct python Regular expression to create double dict

我有一個名為name_x01_y01_000.h5或name_y01_x01_000.h5的文件列表

什么是創建以下列表的正確正則表達式(或其他方法):file,x_ind,y_ind

到目前為止,我有此代碼:

name = 'S3_FullBrain_Mosaic_'
type = '.h5'

wildc = name + '*' + type
files = glob.glob(wildc)
files = np.asarray(files)

wildre = 'r\"' +name+'x(?P<x_ind>\d+)_y(?P<y_ind>\d+).+\"'
m = re.match(wildre,files)

由於glob已經確保了正確的文件名和擴展名,因此regex只需要匹配索引。 re.search允許部分匹配。 .groupdict創建一個以命名組為鍵的字典。 可以手動處理file密鑰。

>>> file = 'S3_FullBrain_Mosaic_x02_y05_abcd.h5'
>>> result = re.search(r'x(?P<x_ind>\d+)_y(?P<y_ind>\d+)', file).groupdict()
>>> result
{'y_ind': '05', 'x_ind': '02'}
>>> result['file'] = file
>>> result
{'y_ind': '05', 'file': 'S3_FullBrain_Mosaic_x02_y05_abcd.h5', 'x_ind': '02'}

您可以遍歷文件以生成字典列表。 為此,無需創建numpy數組,因為我懷疑您將在files列表上進行大量繁重的數值計算。

要處理兩種可能的格式,您將需要使用兩個正則表達式調用re.search 一個將返回None ,另一個將返回可以使用groupdict的匹配groupdict

您可以使用re.findall

import re

names = ['name_x01_y01_000.h5', 'name_y01_x01_000.h5']
for name in names:
    matches = re.findall(r'_([xy])(\d+)(?=_)', name)
    d = {k: int(v) for k, v in matches}
    d['name'] = name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM