2015-07-04 40 views
2

我有一個文件,其名稱每天都會更新,但名稱將始終與一些簡單模式相匹配,例如它總是以「報告」開始,例如report 1 A 2X.csv如何知道哪個文件在Python中根據其名稱匹配模式打開(並打開它)?

如何在任何給定的一天打開文件,不知道它的名字會是什麼,但知道該模式並知道文件夾中只有一個文件匹配?

如果我定義:

pattern = 'report' 

那麼如何合併os.listdir('.')str.startswith(pattern)open()實現這一目標?

+2

水珠會匹配文件名模式 –

+2

看到這一點,例如http://stackoverflow.com/questions/13031989/使用合水珠正則表達式- - 圓頂封裝體的-蟒 – cphlewis

回答

1

試試這個:

from glob import glob 
file = open(glob('report *')[0]) 
1

你可以找到與正則表達式是這樣的:

import re 
x = re.findall(r'report.*csv', 'any text here report 1 A 2X.csv some more stuff here') 

輸出:

['report 1 A 2X.csv'] 
1

你可以看看glob模塊。它接受一個模式並返回與模式匹配的所有文件的列表。

示例 -

>>> import glob 
>>> glob.glob('*.py') 
['a.py', 'b.py', 'getpip.py'] 

然後,您可以遍歷這個glob.glob的結果,並打開每個文件,做你的邏輯 -

示例 -

for f in glob.glob('report*'): 
    <your logic> 

請注意,水珠用途shell-style模式的通配符(不是正則表達式)。

1

正如其他人指出的,re,globfnmatch()是偉大的模式匹配工具。由於您的模式足夠簡單,所以startswithendswith將滿足您的需求。

我有一個目錄,其中包含一些csv文件,特別是一個名爲report_1_A_2x.csv的目錄。我們可以列出所有以report開頭並以後綴.csv結尾的csv文件。在這種情況下,只存在一個匹配,所以我們打開它,然後做一些事情:

import os 

path = '.' # path to file 
pattern = 'report' 
suffix = '.csv' 

files = [f for f in os.listdir(path) if f.startswith(pattern) and f.endswith(suffix)] 
print files # prints: ['report_1_A_2x.csv'] 

with open(os.path.join(path, files[0]), 'r') as rep: 
    # do something ... 
相關問題