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'] 

这里*可以匹配任何数目的字符可能导致基于文件名和所需输出输出错误的。