Python Básico
Carregando, aguarde alguns segundos.

9 - Entrada e saida de dados

Os computadores típicos incorporam partes para a entrada e saida de dados como teclado, tela e discos rígidos.

O Python permite a entrada básica pelo teclado com a função input e a saida pela tela com a função print.

Entrada e saída com teclado e tela podem ser realizadas com pacotes externos, instalados e importados, contendo módulos de frameworks especializados e bibliotecas, como e wxPython.

O Python oferece grande facilidade para o acesso a arquivos em disco rígido, com funções para a criação e mudança de diretórios, e para a abertura e fechamento, para leitura e escrita, em formatos de texto ou binário.

9.1 - A função input()

A palavra-reservada input no Python é usada como instrução para capturar dados digitados pelo usuário durante a execução de um programa, é uma função incorporada que permite aos programas interagir com os usuários de maneira fácil e direta.

Funcionalidade

A função input() no Python pausa a execução do programa e aguarda que o usuário digite algum texto no console.

Uma vez que o usuário pressiona Enter, a função lê a entrada como texto retornando o valor, para ser atribuinda a uma variável para uso posterior no programa.

Por exemplo:

nome = input("Digite seu nome: ")
print(f"Olá, {nome}!")

Se for digitado "Pedro" no console, será impresso:

Olá, Pedro!

Parâmetros

A função input() pode receber opcionalmente uma string como argumento, que é exibida na tela como um prompt para o usuário. Esse prompt pode ser utilizado para indicar claramente ao usuário o tipo de informação que está sendo solicitada.

Retorno

O retorno da função input() é sempre uma string. Mesmo se o usuário digitar números ou outros dados, eles serão tratados como string. É responsabilidade do programador converter essa string para outro tipo de dado, se necessário, usando funções como int() para números inteiros ou float() para números reais.

Usos comuns

A função input() é frequentemente usada em aplicações que requerem interação direta com o usuário, como em ferramentas CLI (interface de linha de comando), pequenos programas educacionais, ou scripts de automação que necessitam de entrada humana.

Considerações de segurança

Usar a função input() pode introduzir vulnerabilidades se o programa não tratar adequadamente os dados de entrada. Por exemplo, converter a entrada diretamente para outros tipos sem validação pode levar a erros ou comportamentos inesperados. É importante validar e limpar qualquer dado recebido antes de processá-lo mais a fundo no programa.

Conclusão

A função input() é uma ferramenta essencial no Python para coletar informações do usuário. Ela é simples de usar, mas poderosa em termos de criar scripts e programas interativos. No entanto, como com qualquer entrada de usuário, cuidado e validação são necessários para manter a robustez e a segurança do programa.

9.2 - A função print()

A função print() é bastante usadas na linguagem Python para saida de dados e informações, exibindo mensagens na tela ou enviá-las para outros dispositivos, como impressoras e arquivos de texto.

No Python, print() é uma função interna, de modo que não é necessário importar nenhuma biblioteca para poder utilizá-la, bastando ser chamada com os argumentos necessários.

Sintaxe da função print()

print(objeto[,objeto,...,objeto], argumentos_de_palavra-chave)

Onde:

  • objetos: Um objeto ou mais objetos, de qualquer tipo e em qualquer quantidade, separados por virgula. Os mais comuns são variáveis e literais numéricos e caracter. Independente do tipo, sempre são convertidos em texto para impressão.
  • argumentos_de_palavra-chave: Argumentos opcionais. Permitem controlar como os objetos são separados, o que é impresso no final da linha, se a impressão ocorre em um arquivo, etc.

Os argumentos de palavra-chave são:

  • sep=’separador‘: Especifica como os objetos serão separados, se houver mais do que um. O padrão é um espaço em branco.
  • end=’caractere‘: Especifica o caractere que é impresso no final da linha. O padrão é \n, uma quebra de linha.
  • file: Especifica um objeto com um método write, com um arquivo. O padrão é o dispositivo sys.stdout (saída padrão – a tela).
  • flush: Valor lógico que especifica se a saída é eliminada (True) ou gravada em buffer (False). O padrão é False.

Como usar

A forma mais simples de usar a função print() é simplesmente chamá-la sem passar nenhum argumento, como segue:

print()

Desta forma, uma linha em branco será retornada (uma linha com o caractere newline – \n). Esta é uma forma de adicionar espaços verticais ou pular linhas ao exibir a saída de um script.

Exibir mensagens na tela

O uso mais comum da função print() é a exibição de mensagens na tela para orientar o usuário. Para tal, basta passar a mensagem desejada como argumento da função. Veja o exemplo:

O dados sendo número é impresso sem aspas.

print(123.45)

O dados sendo texto é impresso entre aspas.

print("Olá amigo! Bem-vindo ao curso de Python.")

O texto poderá ser atribuido a uma variável e impressa essa variável:

texto = "Olá Bóson! Bem-vindo ao curso de Python."
print(texto)

Argumentos posicionais

A função pode aceitar qualquer número de argumentos posicionais, o que é realmente muito útil para criar mensagens complexas e formatadas. Desta forma, podemos também imprimir mais de um objeto separando-os com vírgulas na função:

nome = 'Roberto'
print("CIEDA", "Ciência de Dados", "Estatística e Programação", nome)

Concatenação

Podemos concatenar textos formando mensagens mais complexas e completas a serem exibidas na saída, usando o operador de concatenação + (não confundir com o operador aritmético de adição!):

nome = input("Digite seu nome: ")
print("Olá," + nome + "!\n")
Digite seu nome: Roberto
Olá, Roberto!

Neste exemplo concatenamos a palavra “Olá” com o nome digitado pelo usuário e capturado pela função input(), mais a frase “!. Bem-vindo ao curso de Python!\n”, que termina com um caractere de escape de nova linha (\n).

Um ponto importante a considerar é que a função print() converte implicitamente todos os argumentos para string, chamando a função str() (conversão de tipos para string), e assim consegue tratar a saída de dados como string de modo uniforme.

Desabilitar quebra de linha

Por padrão, a função print() exibe a mensagem desejada na tela e imprime um caractere de nova linha automaticamente, de modo que o cursor sempre vai para a linha seguinte (quebra de linha).

Porém, às vezes desejamos que o cursor permaneça na mesma linha da mensagem impressa, para continuarmos a mostrar dados sem mudar de linha.

Podemos conseguir isso usando o argumento de palavra-chave end, atribuindo uma string vazia a ele:

print('Imprime a mensagem e muda de linha')
print('Imprime a mensagem e permanece na linha. ',end='')
print('Continuei na mesma linha!')

9.3 - Arquivos

O manuseio de arquivos em disco e outra mídias é uma parte importante de qualquer aplicativo.

Os sistemas operacionais implementam sistemas de diretórios e arquivos em mídias físicas como discos magnéticos e ssd.

Python tem várias funções para criação, abertura, leitura, escrita, atualização e exclusão de arquivos.

9.3.1 - Abertura de arquivos

A função open() realiza a abertura de arquivos em Python, recebe dois parâmetros: nome do arquivo e modo de abertura.

Existem quatro diferentes modos de abertura de arquivos:

  • "r"- Leitura - Valor padrão. Abre um arquivo para leitura, causando erro se o arquivo não existir
  • "a"- Append - Abre um arquivo para anexação, cria o arquivo se não existir
  • "w"- Write - Abre um arquivo para escrita, cria o arquivo caso não exista
  • "x"- Criar - Cria o arquivo especificado, retorna um erro se o arquivo existir

Além disso você pode especificar se o arquivo deve ser tratado como modo binário ou texto

  • "t"- Texto - Valor padrão. Modo de texto
  • "b"- Binário - Modo binário (por exemplo, imagens)

9.3.2 - Sintaxe

Para abrir um arquivo para leitura, basta especificar o nome do arquivo.

f = open("arquivo_demo.txt")

O código acima é o mesmo que:

f = open("arquivo_demo.txt", "rt")

Como "r" para leitura e "t"para texto são os valores padrão, você não precisa especificá-los.

Nota: Certifique-se de que o arquivo existe, caso contrário você receberá um erro.

9.3.3 - Arquivos para Leitura

Suponha que temos o seguinte arquivo, localizado na mesma pasta do Python:

arquivo_demo.txt

Olá! Bem-vindo ao arquivo_demo.txt
Este arquivo é para fins de teste.
Boa sorte!

Para abrir o arquivo, use a função interna open().

A função open() retorna um objeto de arquivo, que possui o método read() para leitura do conteúdo do arquivo.

Exemplo:

f = open("arquivo_demo.txt", "r")
print(f.read())

Se o arquivo estiver localizado em um local diferente, você terá de especificar o caminho do arquivo.

Exemplo:

f = open("c:\\cieda\bemvindo.txt", "r")
print(f.read())

9.3.3.1 - Leitura de partes do arquivo

Por padrão, o método read() retorna o texto inteiro do arquivo, mas você também pode especificar quantos caracteres deseja retornar.

Exemplo: retorne os 5 primeiros caracteres do arquivo.

f = open("arquivo_demo.txt", "r")
print(f.read(5))

9.3.4 - Arquivos para escrita

Para gravar em um arquivo existente, você deve adicionar um parâmetro à função open():

  • "a" - Append - anexará ao final do arquivo
  • "w" - Write - substituirá qualquer conteúdo existente

Exemplo: abra o arquivo "demofile2.txt" e anexe o conteúdo ao arquivo:

f = open("demofile2.txt", "a")
f.write("Agora o arquivo tem mais conteúdo!")
f.close()

Exemplo: abra e leia o arquivo após o anexo:

f = open("demofile2.txt", "r")
print(f.read())

Exemplo: abra o arquivo "demofile3.txt" e sobrescreva o conteúdo.

f = open("demofile3.txt", "w")
f.write("Opa! O conteúdo foi excluido!")
f.close()

Nota: o método "w" substituirá o arquivo inteiro.

9.3.5 - Criar um novo arquivo

Para criar um novo arquivo em Python, use o método open(), com um dos seguintes parâmetros:

  • x (create): criará um arquivo, retornará um erro se o arquivo existir.
  • a (append): criará um arquivo se o arquivo especificado não existir.
  • w (write): criará um arquivo se o arquivo especificado não existir.

Exemplo: crie um arquivo chamado "meu_arquivo.txt".

f = open("demofile3.txt", "w")
f.write("Opa! O conteúdo foi excluido!")
f.close()

f = open("meu_arquivo.txt", "x")

f = open("demofile3.txt", "w")
f.write("Opa! O conteúdo foi excluido!")
f.close()

Resultado: um novo arquivo vazio é criado!

Exemplo: crie um novo arquivo se ele não existir.

f = open("meuarquivo.txt", "w")

9.3.6 - Exclusão de arquivo

Para excluir um arquivo, você deve importar o módulo os e executar sua função os.remove():

Exemplo: remova o arquivo "arquivo_demo.txt".

import os
os.remove("demofile.txt")

9.3.7 - Verifique se o arquivo existe

Para evitar erros, verifique se o arquivo existe antes de tentar excluí-lo.

Exemplo: verifique se o arquivo existe e exclua-o

import os
if os.path.exists("demofile.txt"):
  os.remove("demofile.txt")
else:
  print("O arquivo não existe")

9.3.8 - Exclusão de pasta

Para excluir uma pasta inteira, use o método os.rmdir()

Exemplo: remova a pasta "minha_pasta":

import os
os.rmdir("minha_pasta")

9.4 - Bancos de dados SQL

Instalar e usar um Sistema de Gerenciamento de Banco de Dados (SGBD) em um servidor de rede e interagir com ele usando Python envolve várias etapas, desde a instalação do próprio SGBD até a execução de comandos SQL por meio de um programa Python.

Aqui está uma resenha abrangente que cobre essas etapas sem especificar um SGBD particular.

Instalação do SGBD em um Servidor de Rede

A instalação de um SGBD em um servidor de rede geralmente começa com a escolha do sistema operacional adequado, seguido da instalação do software do SGBD. Esta etapa inclui:

  • Download do Software: Obter a versão mais recente do SGBD compatível com o sistema operacional do servidor.
  • Configuração do Servidor: Inclui a configuração de parâmetros de rede, segurança (como firewalls e regras de acesso), e a instalação de atualizações de segurança relevantes.
  • Instalação do SGBD: Executar o instalador do SGBD, que pode incluir a configuração de variáveis de ambiente, diretórios de dados e parâmetros de inicialização.
  • Configuração Inicial: Configurar aspectos como esquemas de banco de dados, contas de usuário, e permissões, além de ajustes de desempenho.

Instalação do Pacote do Driver no Python

Para que um programa Python possa comunicar-se com o SGBD, é necessário instalar um pacote de driver específico. Esses drivers são geralmente disponibilizados como bibliotecas que podem ser instaladas usando gerenciadores de pacotes como pip. O processo envolve:

  • Identificação do Driver Correto: Selecionar o driver adequado para o SGBD em uso.
  • Instalação do Driver: Usar um comando como pip install nome_do_pacote para instalar a biblioteca.

Importação no Programa Python

Uma vez instalado o driver, o próximo passo é importar a biblioteca no seu programa Python para começar a interagir com o banco de dados:

  • Importação da Biblioteca: Adicionar uma declaração de importação no início do script Python, como import nome_do_pacote.

Conexão ao Banco de Dados

Para realizar qualquer operação no banco de dados, primeiro é necessário estabelecer uma conexão. Isso é feito utilizando a API fornecida pelo driver:

  • String de Conexão: Configurar a string de conexão que inclui detalhes como host, porta, nome do usuário, senha e o nome do banco de dados.
  • Estabelecimento da Conexão: Usar a função de conexão do driver para criar uma conexão ao banco de dados.

Métodos de Manipulação SQL

Com a conexão estabelecida, o programa Python pode agora executar comandos SQL para manipular dados:

  • Criação de Cursor: Criar um objeto cursor, que é usado para executar comandos.
  • Execução de Comandos SQL: Usar métodos do cursor como execute() para rodar comandos SQL como SELECT, INSERT, UPDATE, e DELETE.
  • Gerenciamento de Transações: Controlar transações usando métodos como commit() e rollback() para garantir a integridade dos dados.
  • Encerramento da Conexão: Fechar a conexão após a conclusão das operações para liberar recursos.

Conclusão

A instalação de um SGBD e a interação com ele através de Python são processos que exigem compreensão tanto do ambiente de rede e do sistema operacional quanto das especificidades do SGBD escolhido e da programação em Python.

Embora cada SGBD possa ter suas peculiaridades, o processo geral descrito acima fornece uma base sólida para começar a trabalhar com bancos de dados em aplicações Python.

9.4.1 - Principais SGBDs

Os seis principais Sistemas Gerenciadores de Bancos de Dados (SGBDs) que podem ser acessados do Python são: SQLite, MySQL/MariaDB, PostgreSQL, Interbase/Firebird, MS-SQL e Oracle.

Os quatro primeiros são livres e os dois últimos comerciais, enquanto o MySQL/MariaDB tem o MySQL que é proprietário da Oracle e o MariaDB é livre (open-source).

A seguir são detalhadas a instalação do pacote de driver para cada um dos SGBDs, como são importados e conectados.

As conexões devem ser feitas de acordo com os argumentos host, database, user e password.

Os estilos de acesso variam muito pouco, com excessão do SQLite, que acessa um arquivo local onde está o banco de dados.

Sqlite

Bastante usado para quase tudo que não precise ser partilhado em rede.

É rapido, simples, não depende de servidor (já que o seu programa fica responsável pelo gerenciamento do banco de dados).

Não serve para nada com intenções mais sérias já que não funciona em rede, a não ser que se partilhe os arquivos e acesse-o a partir daí, mas ele não é multiusuário.

Para instalar:

pip install sqlite

Para importar:

import sqlite

Para conectar:

con = sqlite.connect(
    'nome do arquivo',
    mode=666)

O argumento mode é opcional, e pode ser 775, 666 ou 600. O padrão é 666.

Os modos são:

  • mode=775: Permite que outros usuários leiam e escrevam no banco de dados, e que o usuário atual leia e escreva no banco de dados.
  • mode=666: Permite que outros usuários leiam o banco de dados, e que o usuário atual leia e escreva no banco de dados.
  • mode=600: Permite que apenas o usuário atual leia e escreva no banco de dados.

MySQL

Para instalar:

Fácil de instalar (principalmente no windows), fácil de gerenciar e bastante rápido. É bastante eficiente e é o mais utilizado na internet em sites dinâmicos.

pip install MySQLdb

Para importar:

import MySQLdb

Para o MySQL:

con = MySQLdb.connect(
    'servidor',
    'usuario',
    'senha')
con.select_db(
    'banco de dados')

PostgreSQL

É mais difícil de instalar e configurar, o driver para Python é dificil de compilar e tem padrões esquisitos (Eu compilei a partir dos fontes, mesmo assim o driver não encontrava as bibliotecas necessárias para a compilação). Eu pessoalmente não sei porque alguem usa isso, mas.... Nos testes que eu vi é o unico que tem condições de competir com criaturas como o Oracle. Existem diversos drivers para PostgreSQL e Python, os dois melhores são pyPgSQL tratado no artido e ainda psycopg, IMHO o melhor disparado. Os comentários acima não se aplicam ao driver do psycopg, que é muito fácil de instalar, rápido e estável.

Para instalar:

pip install pyPgSQL

Para importar:

from pyPgSQL import PgSQL

Para conectar:

con = PgSQL.connect(
    host='servidor',
    database='banco de dados',       
    user='usuario',        
    password='senha')

Interbase / Firebird

Fáceis de instalar no Microsoft Windows a partir dos binários, porém, compilar a partir dos fontes não é tão fácil assim.

O banco é bastante robusto, e está em pé de igualdade com o PostgreSQL em termos de recursos.

Para instalar:

pip install kinterbasdb

Para importar:

import kinterbasdb

Para conectar:

con = kinterbasdb.connect(
    dsn='servidor:/path/arquivo.fdb',
    user='usuario',
    password='senha')

MS-SQL

BD comercial da Microsoft, fácil configuração e tudo na mão através da Interface gráfica.

Quanto a performace não tenho uma base de comparação em produção (ainda).

Mas ele atende as nossas necessidades.

Existem outros módulos - ADOdb for Python/PHP.

Para instalar:

pip install pymssql

Para importar:

import pymssql

Para conectar:

con = pymssql.connect(
    host = 'servidor',
    user = 'usuario',
    password = 'senha',
    database = 'base de dados')

Oracle

Embora todo paradigma possa e deva ser contestado, até mesmo para validá-lo, é consenso que a parte mais estável da aplicação são os dados.

Em conseqüência as diversas empresas que utilizam o BD Oracle podem optar por plataformas livres, mas provavelmente pensarão duas vezes antes de trocar o banco.

Na minha humilde opinião a Oracle tem uma das mais abusivas políticas de preços entre as empresas de software, mas é a líder no setor, portanto o desenvolvedor Python tem que estar preparado para acessar este BD.

Utilizo e recomendo para isto a biblioteca cx_Oracle, um módulo que permite o acesso a este BD de acordo com a especificação da API padrão do Python.

Para instalar:

pip install cx_Oracle

Para importar:

import cx_Oracle

Para conectar:

con = cx_Oracle.connect('usuario/senha@tnsname')

9.4.2 - Uso

Daqui pra frente todos os métodos da API são iguais.

Obter transação (cursor)

cursor = con.cursor()

Executando um sql

cursor.execute('ALGUM SQL')

É importante notar que para colocar parâmetros em sql a melhor forma é fazer de acordo com a API python, isto é, da seguinte forma:

cursor.execute('INSERT INTO TABELA (CAMPO1, CAMPO2, CAMPO3) VALUES (?,?,?)', (valor1, valor2, valor3))

As variáveis valor1, valor2 e valor3 devem ser de um tipo compatível com a coluna correspondente do banco no sql. Isso porque ao passar parâmetros para ao sql dessa forma, você estará deixando a cargo do módulo de conexão ao seu banco o tratamento dos valores. Por exemplo, se valor1 for uma string, o módulo automaticamente colocará o valor entre aspas no lugar de ?. Se valor2 for uma data (datetime.datetime), o módulo convertela-á para o formato do banco. Isso é útil também para evitar sql injections.

Note também que usamos o caracter ? para representar o lugar onde um valor deve ser colocado pelo cursor.execute(). Esse caracter depende do módulo que você utilizar para conectar ao banco de dados, e essa propriedade chama-se paramstyle. Verifique este item na documentação do módulo ao começar a utlizá-lo.

Salvando as alterações

Depois de fazer um insert, update, ou delete, deveremos chamar o método commit() da conexão, para que as mudanças tenham efeito no banco.

cursor.execute('INSERT INTO TABELA (CAMPO1, CAMPO2, CAMPO3) VALUES (?,?,?)', (valor1, valor2, valor3))
con.commit()

Obtendo o resultado

rs = cursor.fetchone() # busca uma linha ou;
rs = cursor.fetchall() # busca todas as linhas ou;
rs = cursor.dictfetchall() # busca todas as linhas, cada linha tem um dicionário com os nomes dos campos

O MS-SQL, o Interbase e o Firebird não possuem suporte para o método dictfetchall().

E no resultado estarão os campos:

print(rs[0]) # valor da primeira coluna.

Alternativamente você pode usar o cursor como um iterator:

for linha in cursor:
    print(linha[0]) # valor da primeira coluna
Arduino
Coautor
Betobyte
Autor
Autores
||| Áreas ||| Estatística ||| Python ||| Projetos ||| Dicas & Truques ||| Quantum ||| Python Básico || Python para Iniciantes || Python Básico || Matplotlib || Numpy || Seaborn || Pandas || Django || Estatística para Cientistas de Dados || Python com ML Básico || Python com ML Básico || Aulas | Introdução (sintaxe, comentários, variáveis, tipos) | Instalação (instalação, execução) | Sintaxe e semântica (sintaxe, semântica, variáveis, tipos de dados, blocos e recuos, comentários) | Tipos (números, strings, booleanos, datas, listas, tuplas, conjuntos, dicionarios, conversão) | Operadores (aritméticos, atribuição, comparação, lógicos, identidade, associação, bitwise) | Blocos (se-senão, laços, funções, classes, iteradores, escopo) | Funções (Funções nativas do Python) | Classes (Classes e Objetos no Python) | Entrada/Saída (teclado, tela, arquivo) | Módulos (pip, instalação, importação) |