2012-09-11 60 views
-1

我正在使用Python並嘗試從使用正則表達式的文件列表中獲取XML文件,但我從未使用過正則表達式。如何查找具有特定名稱的XML文件

假設我有一個文件列表:

files = ['.bash_logout', '20120910NYP.xml', '.bash_profile', '.bashrc', '.mozilla', 'testfile_248.xml'] 

現在我需要獲取格式20120910NYP.xml的文件,所以我決定寫一個正則表達式:

import re 
feedRegex = # ? 
feedFiles = filter((lambda x: re.search(feedRegEx, x) != None), files) 

在上面的代碼,我如何編寫feedRegex的正則表達式來從列表中找到該格式的XML文件?

編輯代碼:

需要在每次我需要這個功能

import re 

def paramikoFetchLatestFeedFile(list_of_files, feedRegEx): 

    self.files = list_of_files 
    self.feedRegEx = feedRegEx 

    feedFiles = filter((lambda x: re.search(self.feedRegEx, x) != None), self.files) 
+0

而除了:爲什麼你在一個不是類方法的簡單方法裏面指定self.files和self.feddRegEx?你真的不知道Python的基礎知識。 –

+0

要求關閉這個問題爲差 –

回答

0

顯然,你想要的時候給list of filesfeedregex代碼,這個功能有點像

regex = re.compile('^\d{8}.NYP.xml$') 

請閱讀正則表達式文檔。這是真正的正則表達式基礎知識。

+0

請看我上面編輯的代碼 –

+0

沒什麼可看的。這些信息足以從此處開始。 –

1
files = [...] 
xml_files = [fn for fn in files if fn.endswith('.xml')] 
+0

感謝您的回答,但我只需要格式爲20120910NYP從列表中的文件 –

+0

不知道你真的想要什麼。如果想檢查列表中是否有內容:使用'in'運算符....並閱讀Python教程...這是Python基礎知識。 –

+0

對不起,你誤解了我,如果你清楚地看到我想要的格式爲yyyymmddNYP.xml的列表中的文件,因爲列表中可能有更多的文件與此格式與不同的日期,所以我想要獲取格式的XML文件以上。 –

1

使用glob爲您做過濾。

假設你有這個目錄:

[email protected]:~/t$ ls -l 
total 0 
-rw-r--r-- 1 burhan burhan 0 Sep 11 09:17 20120101NYP.xml 
-rw-r--r-- 1 burhan burhan 0 Sep 11 09:08 20120819ABC.xml 
-rw-r--r-- 1 burhan burhan 0 Sep 11 09:09 ABC10234ABC.xml 
-rw-r--r-- 1 burhan burhan 0 Sep 11 09:15 bar.txt 
-rw-r--r-- 1 burhan burhan 0 Sep 11 09:15 blablah.gif 
-rw-r--r-- 1 burhan burhan 0 Sep 11 09:15 foo.txt 
-rw-r--r-- 1 burhan burhan 0 Sep 11 09:15 hello.jpg 

這裏是你如何將其過濾:

>>> import glob 
>>> glob.glob("[0-9]*NYP.xml") 
['20120101NYP.xml'] 

對於您的具體要求:

>>> import re 
>>> file_list = ['20121011NYP.xml','foo.bar','zoo.txt','ABC1234.xml','20120101ABC.XML'] 
>>> exp = re.compile('^\d{8}NYP\.xml$', re.I) 
>>> filtered_list = [x for x in file_list if re.match(exp,x)] 
>>> filtered_list 
['20121011NYP.xml'] 
+0

哇,一些什麼接近我的需要。但我需要使用正則表達式來執行此操作,因爲我已經編寫了一個需要feedregex(正則表達式代碼來過濾文件)和文件列表的函數。現在需要用feedRegex代碼過濾文件並返回所有文件,所以我不得不多次使用該函數。 –

+0

請看我上面的編輯代碼 –

+0

閱讀其他答案,請檢查正則表達式文檔。爲自己的案子建立一個正則表達式可以由你自己嘗試一些事情來完成。如果你對某個特定的正則表達式有問題,那就問一下這個特定的問題,不要指望我們正在做你的功課,並把它呈現給你。 –

相關問題