What does %s mean in a Python format string?

What does %s mean in Python? And what does the following bit of code do?

For instance...

 if len(sys.argv) < 2: sys.exit('Usage: %s database-name' % sys.argv[0]) if not os.path.exists(sys.argv[1]): sys.exit('ERROR: Database %s was not found!' % sys.argv[1]) 
2

7 Answers

It is a string formatting syntax (which it borrows from C).

Please see "PyFormat":

Python supports formatting values into strings. Although this can include very complicated expressions, the most basic usage is to insert values into a string with the %s placeholder.

Here is a really simple example:

#Python 2 name = raw_input("who are you? ") print "hello %s" % (name,) #Python 3+ name = input("who are you? ") print("hello %s" % (name,)) 

The %s token allows me to insert (and potentially format) a string. Notice that the %s token is replaced by whatever I pass to the string after the % symbol. Notice also that I am using a tuple here as well (when you only have one string using a tuple is optional) to illustrate that multiple strings can be inserted and formatted in one statement.

2

Andrew's answer is good.

And just to help you out a bit more, here's how you use multiple formatting in one string:

"Hello %s, my name is %s" % ('john', 'mike') # Hello john, my name is mike". 

If you are using ints instead of string, use %d instead of %s.

"My name is %s and I'm %d" % ('john', 12) #My name is john and I'm 12 
5

The format method was introduced in Python 2.6. It is more capable and not much more difficult to use:

>>> "Hello {}, my name is {}".format('john', 'mike') 'Hello john, my name is mike'. >>> "{1}, {0}".format('world', 'Hello') 'Hello, world' >>> "{greeting}, {}".format('world', greeting='Hello') 'Hello, world' >>> '%s' % name "{'s1': 'hello', 's2': 'sibal'}" >>> '%s' %name['s1'] 'hello' 
1

%sand %d are format specifiers or placeholders for formatting strings, decimals, floats, etc.

The most common used format specifiers:

%s: string

%d: decimals

%f: float

Self explanatory code:

name = "Gandalf" extendedName = "the Grey" age = 84 IQ = 149.9 print('type(name): ', type(name)) # type(name): <class 'str'> print('type(age): ', type(age)) # type(age): <class 'int'> print('type(IQ): ', type(IQ)) # type(IQ): <class 'float'> print('%s %s\'s age is %d with incredible IQ of %f ' %(name, extendedName, age, IQ)) # Gandalf the Grey's age is 84 with incredible IQ of 149.900000 # The same output can be printed in following ways: print ('{0} {1}\'s age is {2} with incredible IQ of {3} '.format(name, extendedName, age, IQ)) # With the help of an older method print ('{} {}\'s age is {} with incredible IQ of {} '.format(name, extendedName, age, IQ)) # With the help of an older method print("Multiplication of %d and %f is %f" %(age, IQ, age*IQ)) # Multiplication of 84 and 149.900000 is 12591.600000 # Storing formattings in a string sub1 = "python string!" sub2 = "an arg" a = "I am a %s" % sub1 b = "I am a {0}".format(sub1) c = "with %(kwarg)s!" % {'kwarg':sub2} d = "with {kwarg}!".format(kwarg=sub2) print(a) # "I am a python string!" print(b) # "I am a python string!" print(c) # "with an arg!" print(d) # "with an arg!" 
0

%s indicates a conversion type of string when using Python's string formatting capabilities. More specifically, %s converts a specified value to a string using the str() function. Compare this with the %r conversion type that uses the repr() function for value conversion.

Take a look at the documentation for string formatting.

To answer your second question: What does this code do?...

This is fairly standard error-checking code for a Python script that accepts command-line arguments.

So the first if statement translates to: if you haven't passed me an argument, I'm going to tell you how you should pass me an argument in the future, e.g. you'll see this on-screen:

Usage: myscript.py database-name 

The next if statement checks to see if the 'database-name' you passed to the script actually exists on the filesystem. If not, you'll get a message like this:

ERROR: Database database-name was not found!

From the documentation:

argv[0] is the script name (it is operating system dependent whether this is a full pathname or not). If the command was executed using the -c command line option to the interpreter, argv[0] is set to the string '-c'. If no script name was passed to the Python interpreter, argv[0] is the empty string.

Here is a good example in Python 3.

>>> a = input("What is your name? ") What is your name? Peter >>> b = input("Where are you from? ") Where are you from? DE >>> print("So you are %s of %s." % (a, b)) So you are Peter of DE. 

You Might Also Like