web-dev-qa-db-fra.com

Comment écrire une fonction dans Python avec un nom de fichier comme argument?

**MODIFIER:

Désolé si je n'étais pas clair. Permettez-moi de préciser. J'essaie d'écrire une fonction qui prend un nom de fichier et un nombre i comme arguments, charge le fichier spécifié par le nom de fichier avec numpy.loadtxt () et renvoie le numéro de colonne i (le fichier imprime un tableau).

Ce que je voudrais faire est essentiellement:

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

Mais cela ne me permet même pas de dépasser la première ligne, j'obtiens l'erreur suivante:

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

Donc, ce dont j'ai besoin d'aide, c'est de faire en sorte qu'un nom de fichier soit accepté comme argument, sans avoir ce message d'erreur.

J'ai aussi essayé

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

Et bien que cela soit accepté en tant que fonction, lorsque j'essaie de l'appeler avec un nom de fichier, j'obtiens cette erreur:

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

Conclusion: comment utiliser un nom de fichier comme argument?

*** le message d'erreur exact Message TypeError résultant

1
Patty B

Essayer:

import numpy

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

A titre d'exemple, considérons ce fichier:

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

Ensuite, observez loadfile lu avec succès dans une colonne:

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

Remarques

  1. La ligne def d'une définition de fonction doit se terminer par :.

  2. Les arguments d'une fonction doivent être des variables, telles que filename, et non des chaînes fixes telles que 'filename.py'.

  3. Cela fonctionnera mais ne fera pas ce que vous voulez:

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

    Ce qui précède prend comme argument x mais l'ignore ensuite et tente de charger un nom de fichier dont le nom est le caractère unique x.

  4. Cela ne fonctionnera pas non plus:

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

    filename.py n'est pas un nom valide pour une variable simple. Même si c'était le cas, le code ne tente pas d'utiliser ce nom de variable. Au lieu de cela, il essaie de charger un fichier dont le nom est la chaîne de caractères filename.py.

0
John1024