# Python Strings

> Learn how to work with strings in Python, from concatenation and the str() conversion to built-in methods, escaping, the len() function, slicing, and more.

Author: Flavio Copes | Published: 2020-12-03 | Canonical: https://flaviocopes.com/python-strings/

A string in [Python](https://flaviocopes.com/python-introduction/) is a series of characters enclosed into quotes or double quotes:

```python
"Roger"
'Roger'
```

You can assign a string value to a variable:

```python
name = "Roger"
```

You can concatenate two strings using the `+` operator:

```python
phrase = "Roger" + " is a good dog"
```

You can append to a string using `+=`:

```python
name = "Roger"
name += " is a good dog"

print(name) #Roger is a good dog
```

You can convert a number to a string using the `str` class constructor:

```python
str(8) #"8"
```

This is essential to concatenate a number to a string:

```python
print("Roger is " + str(8) + " years old") #Roger is 8 years old
```

A string can be multi-line when defined with a special syntax, enclosing the string in a set of 3 quotes:

```python
print("""Roger is

    8

years old
""")

#double quotes, or single quotes

print('''
Roger is

    8

years old
''')
```

A string has a set of built-in methods, like:

- `isalpha()` to check if a string contains only characters and is not empty
- `isalnum()` to check if a string contains characters or digits and is not empty
- `isdecimal()` to check if a string contains digits and is not empty
- `lower()` to get a lowercase version of a string
- `islower()` to check if a string is lowercase
- `upper()` to get an uppercase version of a string
- `isupper()` to check if a string is uppercase
- `title()` to get a capitalized version of a string
- `startsswith()` to check if the string starts with a specific substring
- `endswith()` to check if the string ends with a specific substring
- `replace()` to replace a part of a string
- `split()` to split a string on a specific character separator
- `strip()` to trim the whitespace from a string
- `join()` to append new letters to a string
- `find()` to find the position of a substring

and many more.

None of those methods alter the original string. They return a new, modified string instead. For example:

```python
name = "Roger"
print(name.lower()) #"roger"
print(name) #"Roger"
```

You can use some global functions to work with strings, too.

In particular I think of `len()`, which gives you the length of a string:

```python
name = "Roger"
print(len(name)) #5
```

The `in` operator lets you check if a string contains a substring:

```python
name = "Roger"
print("ger" in name) #True
```

Escaping is a way to add special characters into a string.

For example, how do you add a double quote into a string that's wrapped into double quotes?

```python
name = "Roger"
```

`"Ro"Ger"` will not work, as Python will think the string ends at `"Ro"`.

The way to go is to escape the double quote inside the string, with the `\` backslash character:

```python
name = "Ro\"ger"
```

This applies to single quotes too `\'`, and for special formatting characters like `\t` for tab, `\n` for new line and `\\` for the backslash.

Given a string, you can get its characters using square brackets to get a specific item, given its index, starting from 0:

```python
name = "Roger"
name[0] #'R'
name[1] #'o'
name[2] #'g'
```

Using a negative number will start counting from the end:

```python
name = "Roger"
name[-1] #"r"
```

You can also use a range, using what we call **slicing**:

```python
name = "Roger"
name[0:2] #"Ro"
name[:2] #"Ro"
name[2:] #"ger"
```
