2017-04-07 1 views
0

Je voudrais savoir comment récupérer le contenu d'une variable chaîne afin que je puisse utiliser sa valeur comme nom d'argument dans une fonction. Voici le code:Récupère le contenu d'une variable chaîne en utilisant getattr

import pandas 
import jinja2 

oDateList = ['2017-03-22','2017-03-23','2017-03-24'] 
oData = pandas.DataFrame() 
oData['Date'] = oDateList 
MyTemplate = 'Today is {{ Date }}' 
oTemplate = jinja2.Template(MyTemplate) 

for oRow in oData.index: 
    for oColumn in oData.columns: 
     MyTemplateUpdated = oTemplate.render(Date=oData.loc[oRow, oColumn]) 
     print(MyTemplateUpdated) 

Il fonctionne bien et retourne:

Today is 2017-03-22 
Today is 2017-03-23 
Today is 2017-03-24 

Je voudrais récupérer dynamiquement le nom de l'argument Date= du nom de la colonne de dataframe oColumn (qui est 'Date'). J'ai pensé à utiliser getattr(oColumn, 'something') mais je n'ai pas compris comment le faire.

J'ai aussi essayé str(oColumn) et renvoie l'erreur: SyntaxError: keyword can't be an expression

Merci

+0

Avez-vous essayé 'str (oColumn)'? – Rishav

Répondre

0

Si vous souhaitez définir dynamiquement le nom de l'argument étant envoyé à une fonction, vous devez utiliser kwargs.

render(**{argument_name: argument_value} 

Donc, dans votre cas, en supposant que oColumn contient la chaîne que vous souhaitez être l'argument, il ressemblerait à quelque chose comme ça; Faites-moi savoir si j'ai mal compris votre intention.

+0

Merci, mais pourriez-vous s'il vous plaît décrire comment vous intégrer dans le script ci-dessus? Je ne suis pas très familier avec kwargs. –

+0

@ Alexis.Rolland - cette aide aide-t-elle? – Shadow

+0

Certainement, vous avez bien compris et cela fonctionne comme un charme! Je vous remercie! –