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 personagemu
, 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:
- "O Absoluto Mínimo de Desenvolvedor de Software Absolutamente, Positivamente deve saber sobre Unicode e Conjuntos de Caracteres"
- Python Unicode Howto
- Conversa Pragmática Unicode de Nat Batchelder
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 = (!
,?
,.
, ...). ↩