Formatting Strings
There are many ways to format strings—from removing extra spaces to forcing new lines. You can also add in tabs as well as search and replace specified text.
Controlling Spacing with Escapes
Until now, we’ve been printing strings out on one line. What if we need to print out something on multiple lines? We can use the special combination of a backslash and “n” (\n). Every time we insert this into a string, Python will start printing on the next line.
>>> rhyme = "Little Miss Muffett\nSat on a tuffet\nEating her curds and whey." >>> print rhyme Little Miss Muffett Sat on a tuffet Eating her curds and whey.
The backslash is a special character in strings. It’s called an escape, and it clues Python into the fact that you have some special formatting in mind. You can also use an escape to put a string onto several lines in your code so it’s easier to read. The preceding string isn’t so easy to read as it is, but we can fix that as follows:
>>> rhyme = "Little Miss Muffett\n... Sat on a Tuffet\n... Eating her curds and whey." >>> print rhyme Little Miss Muffett Sat on a Tuffet Eating her curds and whey.
A new line isn’t the only thing you can do with an escape, though. You can also insert tabs with \t.
Take note of the spacing in the following example. Each \t is replaced with tab when the string is printed.
>>> header = "Dish\tPrice\tType" >>> print header Dish Price Type
The escape is also useful for when you have quotes in a string. If you’re creating a string that has quotes in it, this can cause some confusion for Python. “Escaping” them lets Python know that you’re not done with the string quite yet.
In the following example, the name has a single quote in it. If we don’t escape it, Python gives us an error. If we do, however, Python has no problem storing the string.
>>> name = 'Harry O'Conner' File "<stdin>", line 1 name = 'Harry O'Conner' ^ SyntaxError: invalid syntax >>> name = 'Harry O\'Conner' >>> print name Harry O'Conner
But what if you need to use a backslash in a string? Simple: Just escape the backslash. In other words, if you want to display one backslash, you’ll need to enter two backslashes.
In the following example, we want to save a path for a Windows machine. These always include backslashes, so we need to escape the backslash. When we print it, only one backslash appears.
>>> path = "C:\\Applications\\" >>> print path C:\Applications\
Removing Whitespace
Sometimes, a user might put extra whitespace when typing in something for your program. This can be annoying when trying to print out several strings on one line, and it can be downright disastrous if you’re trying to compare strings.
In the following example, extra whitespace makes printing out a name difficult. It looks like there’s too much space between the first name and middle name. To make matters more difficult, the extra whitespace means that the comparison first_name == "Hannah" fails.
>>> first_name = "Hannah " >>> middle_name = "Marie" >>> print first_name + " " + middle_name Hannah Marie >>> if first_name == "Hannah": ... print "Hi, Hannah!" ... else: ... print "Who are you?" ... Who are you?
Strings come with a method, strip(), that allows you to strip out all the whitespace at the beginning and end of a string. In the following code snippet, the name Hannah has an extra space tacked onto the end. Using strip() removes that space.
>>> first_name = "Hannah " >>> first_name.strip() 'Hannah'
strip() not only removes all whitespace from around a string, it can remove other characters you specify. This time, Hannah is surrounded by a number of asterisks. Passing an asterisk to strip() removes all the asterisks in the string:
>>> bad_input = "****Hannah****" >>> bad_input.strip('*') 'Hannah'
If you only want to strip the beginning or end of a string, you can use rstrip() or lstrip(), respectively. Here, the name Hannah has asterisks before and after it. If we pass an asterisk to rstrip(), only asterisks at the end of the string are removed. If we pass an asterisk to lstrip(), only asterisks at the beginning of the string are removed.
>>> bad_input = "****Hannah****" >>> bad_input.rstrip('*') '****Hannah' >>> bad_input.lstrip('*') 'Hannah****'
Searching and Replacing Text
Sometimes, you need to find a piece of text that is located in a string. Strings come with a number of methods that let you search for text. These methods can tell you how many times the text occurs, and let you replace one substring with another.
count() returns how many times one string appears in another string. In this example, we’re using a rather lengthy bit of text stored in a variable called long_text. Let’s find how many times the word “the” appears:
>>> long_text.count('the') 5
Apparently, “the” appears five times.
What if we want to find out where the first instance of “ugly” appears? We can use find(). In this example, we want to find where the first instance of the word “ugly” appears in long_text.
>>> long_text.find('ugly') 25
In this example, “ugly” appears starting at the 25th character. A character is one letter, number, space, or symbol.
Strings in Python also come with the ability to replace substrings in strings. You can pass two strings to replace(), and Python will find all instances of the first string and replace it with the second string.
For example, if we don’t like the term “ugly,” we can replace it with “meh” by using replace() and giving it 'ugly' and 'meh' as parameters.
>>> long_text.replace('ugly', 'meh') "Beautiful is better than meh.\n Explicit is better ...[snip]"