Reputation: 1520
This is probably a very simple question for some, but it has me stumped. Can you use variables within python's triple-quotes?
In the following example, how do use variables in the text:
wash_clothes = 'tuesdays'
clean_dishes = 'never'
mystring =""" I like to wash clothes on %wash_clothes
I like to clean dishes %clean_dishes
"""
print(mystring)
I would like it to result in:
I like to wash clothes on tuesdays
I like to clean dishes never
If not what is the best way to handle large chunks of text where you need a couple variables, and there is a ton of text and special characters?
Upvotes: 119
Views: 134814
Reputation: 85458
The preferred way of doing this is using f-strings (introduced in 3.6) rather than str.format()
or using %
:
Example:
wash_clothes = 'tuesdays'
clean_dishes = 'never'
mystring = f""" I like to wash clothes on {wash_clothes}
I like to clean dishes {clean_dishes}
"""
print(mystring)
The standard in Python 2 (which you definitely shouldn't still be using at this point -- it hasn't been supported since 2020), was str.format()
Upvotes: 101
Reputation: 8153
This is real working code from my project. Uses 3 single quotes. note the use of single quotes with %s.
day = "2023-07-11"
df_t= spark.sql('''
select * from db.article_events_ where yyyy_mm_dd < '%s'
''' %(day))
df_t.count()
Upvotes: -1
Reputation: 133849
Yes! Starting from Python 3.6 you can use the f
strings for this: They're interpolated in place, so mystring
would have the desired value after the mystring = ...
line:
wash_clothes = 'tuesdays'
clean_dishes = 'never'
mystring = f"""I like to wash clothes on {wash_clothes}
I like to clean dishes {clean_dishes}
"""
print(mystring)
Should you need to add a literal {
or }
in the string, you would just double it:
if use_squiggly:
kind = 'squiggly'
else:
kind = 'curly'
print(f"""The {kind} brackets are:
- '{{', or the left {kind} bracket
- '}}', or the right {kind} bracket
""")
would print, depending on the value of use_squiggly
, either
The squiggly brackets are:
- '{', or the left squiggly bracket
- '}', or the right squiggly bracket
or
The curly brackets are:
- '{', or the left curly bracket
- '}', or the right curly bracket
Upvotes: 92
Reputation: 66709
One of the ways in Python 2 :
>>> mystring =""" I like to wash clothes on %s
... I like to clean dishes %s
... """
>>> wash_clothes = 'tuesdays'
>>> clean_dishes = 'never'
>>>
>>> print mystring % (wash_clothes, clean_dishes)
I like to wash clothes on tuesdays
I like to clean dishes never
Also look at string formatting
Upvotes: 73
Reputation: 479
Pass multiple args in simple way
wash_clothes = 'tuesdays'
clean_dishes = 'never'
a=""" I like to wash clothes on %s I like to clean dishes %s"""%(wash_clothes,clean_dishes)
print(a)
Upvotes: 0
Reputation: 16362
Also note that you don't need the intermediate variable:
name = "Alain"
print """
Hello %s
""" % (name)
Upvotes: 2
Reputation: 676
I think the simplest way is str.format() as others have said.
However, I thought I'd mention that Python has a string.Template class starting in Python2.4.
Here's an example from the docs.
>>> from string import Template
>>> s = Template('$who likes $what')
>>> s.substitute(who='tim', what='kung pao')
'tim likes kung pao'
One of the reasons I like this is the use of a mapping instead of positional arguments.
Upvotes: 10
Reputation: 3542
Yes. I believe this will work.
do_stuff = "Tuesday"
mystring = """I like to do stuff on %(tue)s""" % {'tue': do_stuff}
EDIT: forgot an 's' in the format specifier.
Upvotes: 12