2017-08-03 62 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在這裏? :( –