Python函数有一个文件列表作为参数?

时间:2017-08-03 04:01:41

标签: python function

我正在构建一个需要对多个文件进行操作的函数,方法如下:

def myfuntion(filenames):
    n = len(filenames)
    if n > 0:
        data = fits.open(filenames)
        for i in range(1,n):
            final = *DO SOMETHING FOR EACH FILE*
    return final 

我们的想法是使用多个文件调用该函数:

mean_myfuntion(['file1.fits', 'file2.fits', 'file3.fits'])

然而问题是我收到以下错误:

OSError: File-like object does not have a 'write' method, required for mode 'ostream'.

而且我不确定发生了什么。我怀疑我在调用文件名时遗漏了一些东西( data = fits.open(文件名) ),如果你们有任何建议,那就更多了比欢迎。

谢谢!

3 个答案:

答案 0 :(得分:1)

您的代码存在的问题是,您要list作为fits.open()的文件,但str是必需的: 见Docs。 因此,您需要遍历列表以逐个获取文件名为'str'。

def myfuntion(filenames):
    n = len(filenames)
    if n > 0:
        for file in filenames:
            data = fits.open(file)
            final = *DO SOMETHING FOR EACH FILE*
    return final 

答案 1 :(得分:0)

  1. 在文件上调用open。您这样做是为了列表

  2. 您可以使用相同的效果测试列表的真实性 - 此处不需要len

  3. 您可以使用yield语法从函数中为每个文件返回多个值

  4. def myfuntion(filenames):
        if not filenames:
            return None
    
        for file in filenames:
            data = fits.open(file)
            final = ... # DO SOMETHING FOR EACH FILE
            yield final
    

答案 2 :(得分:-1)

尝试with open,如下所示:

with open(file, 'r') as f:
    # *DO SOMETHING FOR EACH FILE*