Em Python 3 tudo é objeto e uma string é do tipo str.

type(s)
# <class 'str'>

Podemos acessar uma string pelo seu index.

"python"[0] # 'p'
"python"[1] # 'y'
"python"[2] # 't'
"python"[3] # 'h'
"python"[4] # 'o'
"python"[5] # 'n'

Mas não podemos alterar seu valor atribuindo um valor através do índice.

palavra = "foo"
palavra[1] = "r"
# TypeError: 'str' object does not support item assignment

String é um objeto iterável.

for letter in "python":
    print letter

"""
p
y
t
h
o
n
"""

Podemos fatiar a string.

#
# Nossa string
#
s = "flavio"

#
# Determinado comprimento
#
s[1:4] # 'lav'

#
# Do começo até i
#
s[0:3] # 'fla'
s[:3]  # 'fla'

#
# Acessando pelo final
#
s[-1] # 'o'
s[-2] # 'i'

#
# Acessando completamente
#
s     # 'flavio'
s[:]  # 'flavio'
s[0:] # 'flavio'

Leia mais sobre fatiamento de sequências.

Concatenamos strings com o sinal +, exemplo: "Spam " + "and" + " eggs"

Quando concatenamos com um número, precisamos fazer a conversão, exexemplo: "The value of pi is around " + str(3.14)

Escapamos (scape) caracters com o sinal \, exemplo: 'There\'s a snake in my boot!'

Pesquisando a string

Podemos pesquisar um string com o operador in, exemplo

"b" in "abc"     # True
"d" in "abc"     # False
"d" not in "abc" # True
"b" not in "abc" # False

Métodos comuns para strings

Método len()

Mostra o tamanho da string

s = "foo"
len(s)
# 3

Método upper()

Caixa alta.

"foo".upper() # FOO

Método lower()

Caixa baixa.

"ALFA".lower() # alfa

Método str()

Converte em string.

num = 123
type(num)      # <class 'int'>
type(str(num)) # <class 'str'>

Método isalpha()

Retorna False se a string contiver algum caracter que não seja letras

"abc".isalpha()  # True
"1fg".isalpha()  # False
"123".isalpha()  # False
"/+)".isalpha()  # False

Método strip()

Retira espaços em branco no começo e no fim

" sobrando espaços ".strip()      # 'sobrando espaços'
"  sobrando espaços   ".strip()   # 'sobrando espaços'

Método join()

Junta cada item da string com um delimitador especificado.

É o inverso do split().

", ".join("abc")
# 'a, b, c'

Aceita listas.

"-".join(['flavio', 'alxandre', 'micheletti'])
# 'flavio-alexandre-micheletti'

Método split()

Separa uma string conforme um delimitador.

É o inverso do join().

s = 'n o m e'
s.split()      # ['n', 'o', 'm', 'e']
s.split(" ")   # ['n', 'o', 'm', 'e']
s.split("")    # ValueError: empty separator

Fonte