web-dev-qa-db-ja.com

引数としてファイル名を使用してPythonで関数を作成するにはどうすればよいですか?

**編集:

不明な場合は申し訳ありません。明確にしましょう:ファイル名と数値iを引数として取り、numpy.loadtxt()でファイル名で指定されたファイルをロードし、列番号iを返す関数を作成しようとしています(ファイルは配列を印刷します)。

基本的に私がやりたいことは:

def loadfile(filename.py, i):
    f = numpy.loadtxt('filename.py', usecols=(i))
    return(f)

しかし、それでも最初の行を通過させることはできません、私はエラーを取得します:

def loadfile(filename.py, i)
                     ^
Syntax Error: Invalid Syntax

だから私は助けが必要なのは、そのエラーメッセージを取得せずに、何らかの形で引数として受け入れられるファイル名を作ることです。

私も試しました

def loadfile(x, i):
    f = numpy.loadtxt('x', i)
    return(f)

そして、それは関数として受け入れられていますが、実際にファイル名でそれを呼び出そうとすると、このエラーが発生します:

loadfile(sampledata.py, 2)
NameError: name 'sampledata' is not defined.

結論:ファイル名を引数として使用するにはどうすればよいですか?

***正確なエラーメッセージ 結果のTypeErrorメッセージ

1
Patty B

試してください:

import numpy

def loadfile(filename, i):
   return numpy.loadtxt(filename, usecols=(i,))

例として、次のファイルを検討してください。

$ cat nums.txt
1 2 3
4 5 6
7 8 9

次に、列でloadfileが正常に読み取られることを確認します。

>>> loadfile('nums.txt', 2)
array([ 3.,  6.,  9.])

ノート

  1. 関数定義のdef行は、:で終わる必要があります。

  2. 関数の引数は、'filename.py'などの固定文字列ではなく、filenameなどの変数である必要があります。

  3. これは実行されますが、あなたが望むことはしません:

    def loadfile(x, i):
        f = numpy.loadtxt('x', i)
        return(f)
    

    上記はxを引数として取りますが、それを無視し、名前が単一文字xであるファイル名をロードしようとします。

  4. これも機能しません:

    def loadfile(filename.py, i):
        f = numpy.loadtxt('filename.py', usecols=(i))
        return(f)
    

    filename.pyは単純変数の有効な名前ではありません。たとえそうであっても、コードはその変数名を使用しようとしません。代わりに、名前が文字列filename.pyであるファイルをロードしようとします。

0
John1024