【问题标题】:looping through specific files in python循环遍历python中的特定文件
【发布时间】:2013-02-03 20:08:04
【问题描述】:

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

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

【问题讨论】:

  • 你能解释得更好吗?我的意思是,您想将所有以kplr + 一些数字开头并包含特定其他子字符串的文件组合在一起,或者您只是想过滤以kplr 开头并包含一些子字符串的名称?

标签: python file loops filenames


【解决方案1】:

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

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

【讨论】:

  • @Bakuriu:谢谢,有道理。我也添加了glob 解决方案。
  • 谢谢西蒙!这是完美的!
【解决方案2】:
>>> "kplr" in  "kplr006933899-2009131105131_llc.fits"
True
>>> 
>>> "kplR" in  "kplr006933899-2009131105131_llc.fits"
False
>>> 

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

【讨论】:

  • 哦,是的,那只是一个错字。我只是在研究 fnmatch 函数,我得到了这个:'for file in os.listdir('./'): if fnmatch.fnmatch(file,'kplr006933899*slc.fits'):' 现在我想能够指定字符串的开头,也可能是字符串的可能结尾列表,例如 slc、llc,因此它只会循环遍历文件名末尾带有 slc 或 llc 的文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多