2015-04-07 33 views
2

我從本地目錄中有這樣的文件名列表。使用re和從列表中提取一些模式Python2.7

[ '20150301', '20150301121501.tar.gz', '20150302', '20150302121501.tar.gz', '20150303', '20150303121501.tar.gz']

我想提取yyyymmdd目錄名稱,而不是tar.gzfile。這是理想的結果。

[ '20150301', '20150302', '20150303']

我嘗試這一個。

import re 
pattern = "^(?!.*tar.gz).*$" 
file_list = ['20150301', 
'20150301100.tar.gz', 
'20150302', 
'20150302100.tar.gz', 
'20150303', 
'20150303100.tar.gz'] 
matchOB = re.match(pattern , file_list) 

感謝您的閱讀。

回答

0

你可以使用此代碼與^\d+$正則表達式匹配是由僅數字的整個字符串:

import re 

file_list = ['20150301', 
'20150301100.tar.gz', 
'20150302', 
'20150302100.tar.gz', 
'20150303', 
'20150303100.tar.gz'] 
matchOB = [x for x in file_list if re.search(r"^\d+$", x)] 
print(matchOB) 

Sample online demo輸出:

['20150301', '20150302', '20150303'] 

[x for x in file_list if re.search(r"^\d+$", x)]列表理解從僅由1列表返回任何元件+數字。

如果您的日期樣式總是包含8位數字,您可以用^\d{8}$代替^\d+$樣式。

+0

的示例程序@strinbizhec感謝和說明!說起貪婪,簡單的列表更好['20150301','20150302','20150303']。 –

+0

對不起,答案並不完全正確,因爲前瞻是多餘的。 –

0

您可以簡單地檢查名稱中沒有'.tar.gz'的項目。

for fyle in ['20150301', '20150301121501.tar.gz', '20150302', '20150302121501.tar.gz', '20150303', '20150303121501.tar.gz']: 
    if '.tar.gz' not in fyle: 
     print fyle 

給輸出:

20150301 
20150302 
20150303 

要讓輸出作爲一個列表:

my_list = ['20150301', '20150301121501.tar.gz', '20150302', '20150302121501.tar.gz', '20150303', '20150303121501.tar.gz'] 
print [x for x in my_list if '.tar.gz' not in x] 

具有輸出:

['20150301', '20150302', '20150303'] 
0

通過字符串處理:

我們可以用字符串isdigit()方法和len()函數來驗證字符串。

演示:

>>> result = [] 
>>> input_dirs = ['20150301', '20150301121501.tar.gz', '20150302', '20150302121501.tar.gz', '20150303', '20150303121501.tar.gz'] 
>>> for i in input_dirs: 
... if i.isdigit() and len(i)==8: 
...  result.append(i) 
... 
>>> print result 
['20150301', '20150302', '20150303'] 
0

,如果你替換最後的陳述與

matchOB = [re.match(pattern, file).group() for file in file_list if re.match(pattern, file)] 
0

或者類似的東西,你的表達可以工作:

list = ['20150301', '20150301121501.tar.gz', '20150302', '20150302121501.tar.gz', '20150303', '20150303121501.tar.gz'] 
new_list=[] 

for l in list:  
    if l.find(".")<0:  
     new_list.append(l) 
相關問題