1

所以我有一个脚本,我在其中循环浏览文件夹中的一组文件。检索该特定目录中的文件列表后,如何指定要在脚本中使用的文件?

target = './directory/'

for file in listdir(target):

现在我在同一个文件夹中有几个不同的文件。

  • kplr006933899 -2009131105131_ llc .fits
  • kplr006933899-2009131105131_lpd -targ .fits
  • kplr006933899-2012151031540_ slc .fits
  • kplr006933899-2012151031540_spd -targ .fits

它们都属于同一组,用“ kplr006933899 ”表示。如何将部分字符串指定为不同的变量,以指定要循环的文件?

例如:

def function(name,types)

调用时可以在哪里写:

function(kplr006933899,[slc,llc])
4

2 回答 2

3

有多种方法可以做到这一点。第一种方式:

import fnmatch

def my_function(name, types):
    result = []
    for t in types:
        pattern = "{}*{}.fits".format(name, t)
        for filename in fnmatch.filter(listdir(target), pattern):
            result.append(filename)
    return result

您可以使用以下命令调用此函数:my_function("kplr006933899", ["slc", "llc"])。该fnmatch.filter函数执行与您的模式和给定文件名的模式匹配。

第二种方法是使用glob

result = []
for t in types:
    result.extend(glob.glob("{}/{}*{}.fits".format(target, name, t)))
return result
于 2013-02-03T20:19:50.807 回答
0
>>> "kplr" in  "kplr006933899-2009131105131_llc.fits"
True
>>> 
>>> "kplR" in  "kplr006933899-2009131105131_llc.fits"
False
>>> 

请注意,您需要使用引号来表示 string function("kplr006933899", [slc, llc]),否则kplr006933899将被解释为变量。

于 2013-02-03T20:14:10.310 回答