Os computadores típicos incorporam partes para a entrada e saida de dados como a tela, teclado 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 módulos externos especializados 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 a abertura para leitura e escrita de arquivos em formatos de texto e binário.
Python permite a entrada de dados pelo usuário.
Isso significa que podemos solicitar a entrada do usuário.
O método é um pouco diferente no Python 3.6 do Python 2.7.
Python 3.6 usa o método input().
Python 2.7 usa o método raw_input().
O exemplo a seguir solicita o nome de usuário e, quando você digita o nome de usuário, ele é impresso na tela.
Python 3.6
usuario = input("Digite o usuario:")
print("Usuário é: " + nome de usuário)
Python 2.7
nome de usuário = raw_input("Digite nome de usuário:")
print("Usuário é: " + nome de usuário)
O Python para a execução de instruções enquanto espera o retorno da função input() e continua quando o usuário fornece alguma entrada.
A função print() é uma função bastante usadas na linguagem Python.
Sua função é, basicamente, exibir mensagens na tela ou enviá-las para outros dispositivos, como impressoras e arquivos de texto.
No Python 3, print() é uma função interna, de modo que não é necessário importar nenhuma biblioteca para poder utilizá-la.
Basta chamá-la e passar os argumentos necessários.
No Python 2, print era uma declaração, o que significa que não era possível realizar determinadas ações como atribuir o retorno de sua chamada a uma variável ou outra declaração, por exemplo.
Focaremos exclusivamente na função print() do Python 3.
print(objeto(s), 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")
O Python não possui acesso nativo a bancos de dados SQL em sua biblioteca padrão, somente ao Berkley database engine(BDB), mas define uma API padrão que os drivers de acesso a esses bancos de dados devem seguir, assim qualquer que seja o banco de dados os procedimentos são parecidos.
Os quatro principais Sistemas Gerenciadores de Bancos de Dados livres que podem ser acessados do Python são o SQLite, o MySQL, o PostgreSQL e o Interbase/Firebird.
Para cada um inicie importando os drivers:
import MySQLdb # para o MySQL
import sqlite # para o SQLite
from pyPgSQL import PgSQL # para o PostgreSQL
import kinterbasdb # para Interbase / Firebird
import pymssql #para o MS-SQL. (existem outros módulos - ADOdb for Python/PHP)
import cx_Oracle #para o Oracle
Aqui os estilos variam muito pouco, com excessão do SQLite, que acessa um arquivo local onde está o banco de dados.
Para o MySQL:
con = MySQLdb.connect(
'servidor',
'usuario',
'senha')
con.select_db(
'banco de dados')
Para o SQLite:
O argumento mode é opcional, e pode ser 775, 666 ou 600. O padrão é 666.
O modo 775 permite que outros usuários leiam e escrevam no banco de dados, o modo 666 permite que outros usuários leiam o banco de dados, e o modo 600 permite que apenas o usuário atual leia e escreva no banco de dados.
con = sqlite.connect(
'nome do arquivo',
mode=775)
Para o PostgreSQL:
con = PgSQL.connect(
host='servidor',
database='banco de dados',
user='usuario',
password='senha')
Para o Interbase / Firebird:
con = kinterbasdb.connect(
dsn='servidor:/path/arquivo.fdb',
user='usuario',
password='senha')
Para o MS-SQL
con = pymssql.connect(
host = 'servidor',
user = 'usuario',
password = 'senha',
database = 'base de dados')
Para o Oracle
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
Eu uso pra quase tudo, pelo menos para aquilo 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).
É o meu preferido. 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.
É 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.
: 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.
Muito utilizado em Borland Delphi. Os arquivos de instalação podem ser encontrados aqui.
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 ;).
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.