2016-02-26 90 views
2

基本上我試圖根據列表傳遞的名稱打開多個文件。 我有文件記錄/有下列名稱在Python中使用循環打開多個文件

here is the dir structure 
script---myfile.py 
     | 
     |----Log/*.txt 


following files are in Log/ 
parse_1d_30a.txt, 
parse_10d_60a.txt, 
parse_20d_90a.txt 


#!/usr/bin/python 
deviation = ['1', '10', '20'] 
angle = ['30', '60', '90'] 

def openFile(dev, ang): 
    p = open('Log/parse_%sd_%sa.txt'%(dev, ang), 'r') 
    print "open file is", p.name 
    p.close() 

    print "file closed." 

def main(): 
    for d, a in zip(deviation, angle): 
     openFile(d, a) 
main() 

所以,當我執行代碼的第一個文件parse_1d_30a.txt打開,但對其它文件它給IO錯誤:沒有這樣的文件或目錄。

我認爲通過使用'glob'它可能工作。我知道如何在python中單獨打開文件,但不知道爲什麼我在上面的代碼中出錯,以及相同的替代方法。

感謝

+1

你的Python腳本的路徑是什麼? – Kasramvd

回答

1

隨着glob你不能強加絕對嚴謹像正則表達式。在glob中,您需要使用*(任意數量的字符)或?(任何單個字符)之一,這使得嚴格匹配變得困難。

緊密我可以得到:

>>> import glob 
>>> glob.glob(r'parse_[0-9]*d_[0-9][0-9]a.txt') 
['parse_20d_90a.txt', 'parse_1d_30a.txt', 'parse_10d_60a.txt'] 

這裏*可以匹配任何數目的字符可能導致基於文件名和所需輸出輸出錯誤的。