2012-10-23 62 views
0

我正在製作一個腳本來自動分析一些文本數據(具有複雜的結構)並將其插入到MySQL數據庫中。Python:通過匹配迭代到正則表達式

我想有多個循環遍歷基於正則表達式匹配文件名的文件列表。最後,我將連接它們並將它們插入到數據庫中。

這裏是我的正則表達式的表達式:

Trgx= re.compile('([a-zA-Z0-9]{3,4})_.*_.*_.*$'); 
Dtrgx= re.compile('[a-zA-Z0-9]{3,4}_[a-zA-Z0-9]{3,4}_([0-9]{10})_[0-9]{3}'); 
Mrgx= re.compile('.*_([a-zA-Z0-9]{3,4})_.*$'); 
Hrgx= re.compile('.*([0-9]{3}).csv$'); 

我的文件名看起來像這樣:

ecd_cdd_2012102100_000.csv 
ecd_cdd_2012102100_024.csv 
ecd_hdd_2012102200_000.csv 
ecd_hdd_2012102200_024.csv 
ecd_hdd_2012102200_048.csv 
ecd_avgt_2012102200_120.csv 
ecd_avgt_2012102200_144.csv 
ecd_avgt_2012102200_168.csv 
ecd_mint_2012102200_192.csv 
ecd_maxt_2012102200_144.csv 
ecd_maxt_2012102200_168.csv 
ecd_cdd_2012102200_000.csv 
ecd_cdd_2012102200_024.csv 

每個表達式捕獲文件名的一個子集:

  • Trgx捕獲第一部分(本例中每個例子中的「ecd」)
  • Mrgx捕獲的第二部分( 「CDD」, 「HDD」, 「avgt」 等)
  • Dtrgx捕獲的日期/時間段(如2012102100)
  • Hrgx捕獲最後部分(如000或024,擴展前)

每個文件名匹配每一個正則表達式,但.group(1)將通過不同的值來填充 。

我想使用regex exprssions作爲「分組」元素遍歷文件,以便我按正確的順序將它們連接在一起。

事情是這樣的:

for fileName in fileNameList 
    for each distinct value in Trgx.group(1) 
     for each distinct value in Dtrgx.group(1) 
       for each distinct value in Hrgx.group(1) 
        do whatever 

回答

2

這可能是更容易的正則表達式相結合

re_fn = re.compile('(?P<T>[a-zA-Z0-9]{3,4})_(?P<M>[a-zA-Z0-9]{3,4})_(?P<Dt>[0-9]{10})_(?P<H>[0-9]{3}).csv') 

,並保存自己保持4個正則表達式的麻煩。

然後,你可以做

groups = re_fn.match(fileName).groupdict() 
# do stuff with groups['T'], groups['M'], groups['Dt'], groups['H'] 
+0

好極了!萬分感謝。 –