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.
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.
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!
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.
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.
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.
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.
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.
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.
print(objeto[,objeto,...,objeto], argumentos_de_palavra-chave)
Onde:
Os argumentos de palavra-chave são:
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.
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)
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)
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.
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!')
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.
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:
Além disso você pode especificar se o arquivo deve ser tratado como modo binário ou texto
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.
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())
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))
Para gravar em um arquivo existente, você deve adicionar um parâmetro à função open():
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.
Para criar um novo arquivo em Python, use o método open(), com um dos seguintes parâmetros:
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")
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")
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")
Para excluir uma pasta inteira, use o método os.rmdir()
Exemplo: remova a pasta "minha_pasta":
import os
os.rmdir("minha_pasta")
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.
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:
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:
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:
Para realizar qualquer operação no banco de dados, primeiro é necessário estabelecer uma conexão. Isso é feito utilizando a API fornecida pelo driver:
Com a conexão estabelecida, o programa Python pode agora executar comandos SQL para manipular dados:
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.
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.
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:
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')
É 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')
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')
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')
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')
Daqui pra frente todos os métodos da API são iguais.
cursor = con.cursor()
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.
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()
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