2017-08-03 33 views
-5

我建设,需要在多个文件中进行操作的功能,以下列方式:作为参数的文件列表的Python函数?

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(文件名)),如果你们有任何建议,这将是非常值得欢迎的。

谢谢!

+1

你可以添加'为每个文件做东西吗? –

+0

[它的文档](http://astropy.readthedocs.io/en/latest/io/fits/api/files.html)中的哪些地方说它可以与文件名列表一起工作?它显然期望一次单个文件名,因此您需要遍历文件名并一次传递一个文件名。 –

+0

看看这个线程︰https://stackoverflow.com/questions/29703939/python-pyfits-cannot-open-file –

回答

1

与您的代码的问题是,你给一个list作为arugument到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 
0
  1. 呼叫open。你这样做是对的列表

  2. 你可以用同样的效果测试列表感实性 - len这里不需要

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


def myfuntion(filenames): 
    if not filenames: 
     return None 

    for file in filenames: 
     data = fits.open(file) 
     final = ... # DO SOMETHING FOR EACH FILE 
     yield final 
-1

尝试with open象下面这样:

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

为什么是-1在这里? :( –