Entrada e saída

Haverá situações em que seu programa deve interagir com o usuário. Por exemplo, você gostaria de receber informações do usuário e depois imprimir alguns resultados. Podemos conseguir isso usando o input() função e print função, respectivamente.

Para a produção, também podemos usar os vários métodos do str (string) classe. Por exemplo, você pode usar o rjust método para obter uma string que é justificada corretamente para uma largura especificada. Veja help(str) para mais detalhes.

Outro tipo comum de entrada / saída é lidar com arquivos. A capacidade de criar, ler e escrever arquivos é essencial para muitos programas e exploraremos esse aspecto neste capítulo.

Entrada do usuário

Salve este programa como io_input.py:

def reverse(text):
    return text[::-1]


def is_palindrome(text):
    return text == reverse(text)


something = input("Enter text: ")
if is_palindrome(something):
    print("Yes, it is a palindrome")
else:
    print("No, it is not a palindrome")

Saída:

$ python3 io_input.py
Enter text: sir
No, it is not a palindrome

$ python3 io_input.py
Enter text: madam
Yes, it is a palindrome

$ python3 io_input.py
Enter text: racecar
Yes, it is a palindrome

Como funciona

Usamos o recurso de corte para inverter o texto. Já vimos como podemos fazer fatias de seqüências usando o seq[a:b] código a partir da posição a para posicionar b. Podemos também fornecer um terceiro argumento que determina a step pelo qual o corte está pronto. O passo padrão é 1 por causa do qual retorna uma parte contínua do texto. Dar um passo negativo, ou seja, -1 retornará o texto ao contrário.

A input() A função leva uma string como argumento e a exibe para o usuário. Então espera que o usuário digite algo e pressione a tecla de retorno. Uma vez que o usuário tenha entrado e pressionado a tecla de retorno, o input() função retornará então o texto que o usuário entrou.

Levamos esse texto e o invertimos. Se o texto original e o texto invertido forem iguais, o texto é um palindrome.

Exercício de lição de casa

Verificar se um texto é um palíndrom também deve ignorar pontuação, espaços e casos. Por exemplo, "Levante-se para votar, senhor". também é um palíndromo, mas o nosso programa atual não diz que é. Você pode melhorar o programa acima para reconhecer este palindrome?

Se você precisar de uma dica, a idéia é que...1

Arquivos

Você pode abrir e usar arquivos para ler ou escrever criando um objeto do file classe e usando sua read, readline ou write métodos adequados para ler ou escrever no arquivo. A capacidade de ler ou escrever no arquivo depende do modo que você especificou para a abertura do arquivo. Então, finalmente, quando você terminar o arquivo, você chama o close método para dizer ao Python que acabamos de usar o arquivo.

Exemplo (salvar como io_using_file.py):

poem = '''\
Programming is fun
When the work is done
if you wanna make your work also fun:
    use Python!
'''

# Open for 'w'riting
f = open('poem.txt', 'w')
# Write text to file
f.write(poem)
# Close the file
f.close()

# If no mode is specified,
# 'r'ead mode is assumed by default
f = open('poem.txt')
while True:
    line = f.readline()
    # Zero length indicates EOF
    if len(line) == 0:
        break
    # The `line` already has a newline
    # at the end of each line
    # since it is reading from a file.
    print(line, end='')
# close the file
f.close()

Saída:

$ python3 io_using_file.py
Programming is fun
When the work is done
if you wanna make your work also fun:
    use Python!

Como funciona

Note que podemos criar um novo objeto de arquivo simplesmente usando o open método. Nós abrimos (ou criamos se ainda não existe) este arquivo usando o built-in open função e especificando o nome do arquivo e o modo em que queremos abrir o arquivo. O modo pode ser um modo de leitura ('r'), modo de escrita ('w') ou modo de anexar ('a'). Também podemos especificar se estamos lendo, escrevendo ou anexando no modo de texto ('t') ou modo binário ('b'). Na verdade, existem muitos mais modos disponíveis e help(open) Dá-lhe mais detalhes sobre eles. Por padrão, open() considera o arquivo como um arquivo 't'ext e abre no modo' r'ead.

No nosso exemplo, primeiro abrimos / criamos o arquivo no modo de texto de escrita e usamos o write Método do objeto de arquivo para escrever nossa variável de string poem para o arquivo e, finalmente, close ao arquivo.

Em seguida, abrimos o mesmo arquivo novamente para leitura. Não precisamos especificar um modo porque "ler arquivo de texto" é o modo padrão. Lemos em cada linha do arquivo usando o readline método em um loop. Este método retorna uma linha completa, incluindo o caractere de nova linha no final da linha. Quando um empty string é devolvido, significa que chegamos ao final do arquivo e quebramos o loop.

No final, finalmente close o arquivo.

Podemos ver da nossa readline saída que este programa realmente escreveu e leu do nosso novo poem.txt file.

Pickle

Python fornece um módulo padrão chamado pickle que você pode usar para armazenar qualquer objeto Python simples em um arquivo e depois recuperá-lo mais tarde. Isso é chamado de armazenamento do objeto persistentemente.

Exemplo (salvar como io_pickle.py):

import pickle

# The name of the file where we will store the object
shoplistfile = 'shoplist.data'
# The list of things to buy
shoplist = ['apple', 'mango', 'carrot']

# Write to the file
f = open(shoplistfile, 'wb')
# Dump the object to a file
pickle.dump(shoplist, f)
f.close()

# Destroy the shoplist variable
del shoplist

# Read back from the storage
f = open(shoplistfile, 'rb')
# Load the object from the file
storedlist = pickle.load(f)
print(storedlist)

Saída:

$ python io_pickle.py
['apple', 'mango', 'carrot']

Como funciona

Para armazenar um objeto em um arquivo, temos que primeiro open o arquivo em escreva binario modo e depois chame o dump função do pickle módulo. This process is called pickling.

Em seguida, recuperamos o objeto usando o load função do pickle módulo que retorna o objeto. Esse processo é chamado unpickling.

Unicode

Até agora, quando estamos escrevendo e usando cordas, ou lendo e escrevendo para um arquivo, usamos apenas caracteres ingleses simples. Os caracteres ingleses e não ingleses podem ser representados no Unicode (veja os artigos no final desta seção para obter mais informações), e o Python 3, por padrão, armazena variáveis de cadeia (pense em todo o texto que escrevemos usando simples ou duplos ou triplos citações) no Unicode.

NOTA: Se você estiver usando o Python 2, e queremos poder ler e escrever outros idiomas que não sejam ingleses, precisamos usar o unicode digite, e tudo começa com o personagem u, ou seja, u"hello world"

>>> "hello world"
'hello world'
>>> type("hello world")
<class 'str'>
>>> u"hello world"
'hello world'
>>> type(u"hello world")
<class 'str'>

Quando os dados são enviados através da Internet, precisamos enviá-lo em bytes ... algo que seu computador entende facilmente. As regras para a tradução do Unicode (que é o que o Python usa quando armazena uma string) para bytes é chamada de codificação. Uma codificação popular para usar é UTF-8. Podemos ler e escrever na UTF-8 usando um argumento de palavras-chave simples em nosso open função.

# encoding=utf-8
import io

f = io.open("abc.txt", "wt", encoding="utf-8")
f.write(u"Imagine non-English language here")
f.close()

text = io.open("abc.txt", encoding="utf-8").read()
print(text)

Como funciona

Nós usamos io.open e depois use o encoding argumento na primeira declaração aberta para codificar a mensagem e, novamente, na segunda instrução aberta ao decodificar a mensagem. Observe que devemos usar apenas a codificação na declaração aberta quando em modo texto.

Sempre que escrevemos um programa que usa literais Unicode (colocando um u antes da corda), como nós usamos acima, temos que garantir que o próprio Python seja informado de que nosso programa usa UTF-8, e nós temos que colocar # encoding=utf-8 comment at the top of our program.

Você deve aprender mais sobre este tópico lendo:

Resumo

Discutimos vários tipos de entrada / saída, sobre o gerenciamento de arquivos, sobre o módulo de pickle e sobre o Unicode.

Em seguida, exploraremos o conceito de exceções.


1. Use uma tupla (você pode encontrar uma lista de todos marca de pontuação aqui) para armazenar todos os caracteres proibidos, use o teste de associação para determinar se um personagem deve ser removido ou não, ou seja, proibido = (!, ?, ., ...).