2011-02-08 22 views
19

Sto cercando di costruire una stringa di formato con l'argomento pigro, ad esempio, ho bisogno smth come:pitone, stringa di formato

"%s \%s %s" % ('foo', 'bar') # "foo %s bar" 

come posso fare questo?

risposta

30
"%s %%s %s" % ('foo', 'bar') 

è necessario %%

2
"%s %%s %s" % ('foo', 'bar') # easy! 

Il doppio carattere% consente di inserire% nelle stringhe di formato.

+1

stupido limitazione di 30 caratteri:/ –

+0

sono d'accordo. :-) [anche sui commenti] – payne

1

Basta utilizzare un secondo simbolo di percentuale.

In [17]: '%s %%s %s' % ('foo', 'bar') 
Out[17]: 'foo %s bar' 
4
>>> "%s %%s %s" % ('foo', 'bar') 
'foo %s bar' 
2

%% sfugge il simbolo %. Quindi, in pratica non resta che scrivere:

"%s %%s %s" % ('foo', 'bar') # "foo %s bar" 

E se mai è necessario per emettere una percentuale o qualcosa:

>>> "%s %s %%%s" % ('foo', 'bar', '10') 
'foo bar %10' 
17

con Python 2.6:

>>> '{0} %s {1}'.format('foo', 'bar') 
'foo %s bar' 

o con Python 2.7:

>>> '{} %s {}'.format('foo', 'bar') 
'foo %s bar' 
0

Se non si 'T conoscere l'ordine degli argomenti saranno essere comunicate, è possibile utilizzare i modelli di stringa

Ecco una classe autonomo che si atteggia a str con questa funzionalità (solo per argomenti chiave)

class StringTemplate(str): 
    def __init__(self, template): 
     self.templatestr = template 

    def format(self, *args, **kws): 
     from string import Template 
     #check replaced strings are in template, remove if undesired 
     for k in kws: 
      if not "{"+k+"}" in self: 
       raise Exception("Substituted expression '{k}' is not on template string '{s}'".format(k=k, s=self)) 
     template= Template(self.replace("{", "${")) #string.Template needs variables delimited differently than str.format 
     replaced_template= template.safe_substitute(*args, **kws) 
     replaced_template_str= replaced_template.replace("${", "{") 
     return StringTemplate(replaced_template_str) 
0

Python 3.6 ora supporta stenografia letterale interpolazione stringa con PEP 498. Per il vostro caso d'uso, la nuova sintassi permette:

var1 = 'foo' 
var2 = 'bar' 
print(f"{var1} %s {var2}")