2017-08-03 23 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'. 

そして、私は何が起こっているのかわからない:私は次のエラーを受信して​​いています。私はファイル名(データ= fits.open(filenames))を呼び出すときに何か不足していると思っています。もしあなたに助言があれば歓迎されます。

ありがとうございます!

+1

「DO SOMEE​​THING FOR EACH FILE」の部分を追加できますか? –

+0

[そのドキュメント](http://astropy.readthedocs.io/en/latest/io/fits/api/files.html)は、ファイル名のリストでは動作すると言いますか?一度に1つのファイル名が明白になるので、ファイル名をループして一度に1つずつ渡す必要があります。 –

+0

このスレッドをチェックしてください:https://stackoverflow.com/questions/29703939/python-pyfits-cannot-open-file –

答えて

1

あなたのコードの問題は、あなたがfits.open()にarugumentとしてlistを与えているされているが、strが必要となります。 はDocsを参照してください。 リストをループしてファイル名を 'str'として1つずつ取得する必要があります。ファイルの

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。あなたは、リストのためにそうしている

    あなたは同じ効果でtruthinessのためのリストをテストすることができます
  2. から lenは、ここでは必要ありません

    あなたはファイルごとに、あなたの関数から複数の値を返すために 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ですか? :( –

関連する問題