├── .gitignore ├── README.md ├── audio-para-texto ├── README.md ├── audio.wav ├── main.py └── requirements.txt ├── automacao-com-selenium ├── README.md ├── driver │ └── blank ├── main.py └── requirements.txt ├── barra-de-progresso ├── README.md ├── main.py └── requirements.txt ├── dados-em-tabelas ├── README.md ├── requirements.txt ├── tabela.py └── tabela_colorida.py ├── extraindo-audio-de-videos ├── Linkin_Park_Numb.mp4 ├── README.md ├── main.py └── requirements.txxt ├── gerando-arquivos-pdf ├── README.md ├── assets │ ├── estilos.css │ ├── grafico.png │ ├── logo.png │ └── pagina.html ├── main.py ├── requirements.txt └── saida.pdf ├── graficos-com-matplotlib ├── dados │ └── Falsificacao_Dados_Abertos.csv ├── main.py └── requirements.txt ├── manipulando-arquivos-excel ├── README.md ├── data │ └── mock_data.csv ├── main.py └── requirements.txt ├── primeiro-webscraping ├── README.md ├── main.py └── requirements.txt ├── reconhecimento-textual ├── README.md ├── livro.jpg ├── main.py ├── placas.jpg └── requirements.txt ├── requisicoes-paralelas ├── README.md ├── main.py └── requirements.txt └── texto-para-audio ├── README.md ├── main.py └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | /**/venv 2 | /**/.idea 3 | 4 | # Created by https://www.toptal.com/developers/gitignore/api/python,virtualenv 5 | # Edit at https://www.toptal.com/developers/gitignore?templates=python,virtualenv 6 | 7 | ### Python ### 8 | # Byte-compiled / optimized / DLL files 9 | __pycache__/ 10 | *.py[cod] 11 | *$py.class 12 | 13 | # C extensions 14 | *.so 15 | 16 | # Distribution / packaging 17 | .Python 18 | build/ 19 | develop-eggs/ 20 | dist/ 21 | downloads/ 22 | eggs/ 23 | .eggs/ 24 | lib/ 25 | lib64/ 26 | parts/ 27 | sdist/ 28 | var/ 29 | wheels/ 30 | share/python-wheels/ 31 | *.egg-info/ 32 | .installed.cfg 33 | *.egg 34 | MANIFEST 35 | 36 | # PyInstaller 37 | # Usually these files are written by a python script from a template 38 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 39 | *.manifest 40 | *.spec 41 | 42 | # Installer logs 43 | pip-log.txt 44 | pip-delete-this-directory.txt 45 | 46 | # Unit test / coverage reports 47 | htmlcov/ 48 | .tox/ 49 | .nox/ 50 | .coverage 51 | .coverage.* 52 | .cache 53 | nosetests.xml 54 | coverage.xml 55 | *.cover 56 | *.py,cover 57 | .hypothesis/ 58 | .pytest_cache/ 59 | cover/ 60 | 61 | # Translations 62 | *.mo 63 | *.pot 64 | 65 | # Django stuff: 66 | *.log 67 | local_settings.py 68 | db.sqlite3 69 | db.sqlite3-journal 70 | 71 | # Flask stuff: 72 | instance/ 73 | .webassets-cache 74 | 75 | # Scrapy stuff: 76 | .scrapy 77 | 78 | # Sphinx documentation 79 | docs/_build/ 80 | 81 | # PyBuilder 82 | .pybuilder/ 83 | target/ 84 | 85 | # Jupyter Notebook 86 | .ipynb_checkpoints 87 | 88 | # IPython 89 | profile_default/ 90 | ipython_config.py 91 | 92 | # pyenv 93 | # For a library or package, you might want to ignore these files since the code is 94 | # intended to run in multiple environments; otherwise, check them in: 95 | # .python-version 96 | 97 | # pipenv 98 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 99 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 100 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 101 | # install all needed dependencies. 102 | #Pipfile.lock 103 | 104 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 105 | __pypackages__/ 106 | 107 | # Celery stuff 108 | celerybeat-schedule 109 | celerybeat.pid 110 | 111 | # SageMath parsed files 112 | *.sage.py 113 | 114 | # Environments 115 | .env 116 | .venv 117 | env/ 118 | venv/ 119 | ENV/ 120 | env.bak/ 121 | venv.bak/ 122 | 123 | # Spyder project settings 124 | .spyderproject 125 | .spyproject 126 | 127 | # Rope project settings 128 | .ropeproject 129 | 130 | # mkdocs documentation 131 | /site 132 | 133 | # mypy 134 | .mypy_cache/ 135 | .dmypy.json 136 | dmypy.json 137 | 138 | # Pyre type checker 139 | .pyre/ 140 | 141 | # pytype static type analyzer 142 | .pytype/ 143 | 144 | # Cython debug symbols 145 | cython_debug/ 146 | 147 | ### VirtualEnv ### 148 | # Virtualenv 149 | # http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ 150 | [Bb]in 151 | [Ii]nclude 152 | [Ll]ib 153 | [Ll]ib64 154 | [Ll]ocal 155 | [Ss]cripts 156 | pyvenv.cfg 157 | pip-selfcheck.json 158 | 159 | # End of https://www.toptal.com/developers/gitignore/api/python,virtualenv 160 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dicas 2 | 3 | Repositório com Dicas rápidas da página Python Academy. 4 | 5 | Visite nosso Blog em https://pythonacademy.com.br e nossas Redes Sociais: 6 | - Siga nosso Instagram [@pythonacademybr](https://instagram.com/pythonacademybr); 7 | - Curta nossa página no Facebook [PythonAcademy](https://www.facebook.com/pythonacademy). 8 | 9 | ## DICAS: 10 | - [Como adicionar Barra de Progresso à scripts Python](barra-de-progresso) 11 | - [Como disparar Requisições HTTP em Paralelo](requisicoes-paralelas) 12 | - [Como formatar dados em Tabelas](dados-em-tabelas) 13 | - [Seu primeiro projeto de Webscraping](primeiro-webscraping) 14 | - [Reconhecimento de Textos em Imagens (OCR)](reconhecimento-textual) 15 | - [Conversão de Áudio para Texto (_Speech to Text_)](audio-para-texto) 16 | - [Conversão de Texto para Áudio (_Text to Speech_)](texto-para-audio) 17 | - [Geração de Arquivos PDF](gerando-arquivos-pdf) 18 | - [Manipulação de Arquivos Excel](manipulando-arquivos-excel) 19 | - [Como Extrar Áudio de Vídeos](extraindo-audio-de-videos) 20 | - [Automação com Selenium](automacao-com-selenium) 21 | 22 | ## Não deixe de ler nossos artigos: 23 | - 📝 [Como manipular JSON com Python](https://pythonacademy.com.br/blog/como-manipular-json-no-python) 24 | - 📝 [Manipulando Arquivos PDF com Python](https://pythonacademy.com.br/blog/manipulando-arquivos-pdf-com-python) 25 | - 📝 [O Pacote Collections do Python](https://pythonacademy.com.br/blog/o-pacote-collections-do-python) 26 | - 📝 [Como conectar o Django (Python) ao MySQL](https://pythonacademy.com.br/blog/como-conectar-o-django-ao-mysql) 27 | - 📝 [Como conectar o Django (Python) ao Banco de Dados PostgreSQL](https://pythonacademy.com.br/blog/como-conectar-o-django-ao-postgresql) 28 | - 📝 [O que é e como usar o Painel Administrativo do Django (Python)](https://pythonacademy.com.br/blog/o-painel-admin-do-django) 29 | - 📝 [Os principais comandos do manage.py do Django (Python)](https://pythonacademy.com.br/blog/os-principais-comandos-do-manage-py-do-django) 30 | - 📝 [Seu primeiro projeto Django em 15 minutos](https://pythonacademy.com.br/blog/seu-primeiro-projeto-django-em-15-minutos) 31 | - 📝 [Como criar gráficos com Matplotlib no Python](https://pythonacademy.com.br/blog/como-criar-graficos-utilizando-matplotlib-no-python) 32 | - 📝 [Dataclasses no Python](https://pythonacademy.com.br/blog/dataclasses-no-python) 33 | - 📝 [O que é e como utilizar @property no Python](https://pythonacademy.com.br/blog/como-utilizar-property-no-python) 34 | - 📝 [Classes e Objetos no Python](https://pythonacademy.com.br/blog/classes-e-objetos-no-python) 35 | - 📝 [O guia de estilos de programação PEP8 do Python](https://pythonacademy.com.br/blog/o-guia-de-estilos-pep8-do-python) 36 | - 📝 [Como enviar email utilizando Python](https://pythonacademy.com.br/blog/como-enviar-email-utilizando-python) 37 | - 📝 [Como automatizar planilhas do Excel utilizando Python](https://pythonacademy.com.br/blog/automatize-planilhas-excel-usando-python) 38 | - 📝 [Como escrever em arquivos utilizando Python](https://pythonacademy.com.br/blog/como-escrever-em-arquivos-no-python) 39 | - 📝 [Como abrir arquivos utilizando Python](https://pythonacademy.com.br/blog/como-manipular-arquivos-utilizando-python) 40 | - 📝 [A Biblioteca OS do Python](https://pythonacademy.com.br/blog/a-biblioteca-os-do-python) 41 | - 📝 [Manipulação de Datas e Horas no Python](https://pythonacademy.com.br/blog/manipulacao-datas-e-horarios-no-python) 42 | - 📝 [Fatiamento (ou Slicing) de Listas no Python](https://pythonacademy.com.br/blog/fatiamento-slicing-de-listas) 43 | - 📝 [Como manipular arquivos CSV no Python](https://pythonacademy.com.br/blog/manipulacao-csv-no-python) 44 | - 📝 [Como integrar o ChatGPT em seu código Python](https://pythonacademy.com.br/blog/como-integrar-o-chatgpt-em-seu-codigo-python) 45 | - 📝 [Aprenda a utilizar as Class Based Views (CBV) do Django](https://pythonacademy.com.br/blog/como-utilizar-as-class-based-views-do-django) 46 | - 📝 [Como usar o FastAPI para construir APIs no Python](https://pythonacademy.com.br/blog/como-usar-o-fastapi-para-construir-apis-no-python) 47 | - 📝 [As Funções Map e Filter do Python](https://pythonacademy.com.br/blog/as-funcoes-map-e-filter-no-python) 48 | - 📝 [O que são Funções Lambda no Python](https://pythonacademy.com.br/blog/funcoes-lambda-no-python) 49 | - 📝 [Tratamento de erros e exceções no Python com try/except](https://pythonacademy.com.br/blog/tratamento-erros-excecoes-no-python) 50 | - 📝 [7 truques em Python que todo iniciante deve saber](https://pythonacademy.com.br/blog/7-truques-em-python-que-todo-iniciante-deve-saber) 51 | - 📝 [Print no Python](https://pythonacademy.com.br/blog/print-no-python) 52 | - 📝 [Args e Kwargs no Python](https://pythonacademy.com.br/blog/args-e-kwargs-do-python) 53 | - 📝 [Estruturas de Repetição usando Loops While no Python](https://pythonacademy.com.br/blog/loops-com-while-no-python) 54 | - 📝 [Estruturas de Repetição usando Loops For no Python](https://pythonacademy.com.br/blog/loops-com-for-no-python) 55 | - 📝 [PyScript: O Python no Seu Browser](https://pythonacademy.com.br/blog/python-no-browser-com-pyscript) 56 | - 📝 [7 Habilidades para se destacar em entrevistas de emprego](https://pythonacademy.com.br/blog/principais-habilidades-para-se-destacar-em-entrevistas-de-emprego) 57 | - 📝 [Fluxo de Trabalho no Git](https://pythonacademy.com.br/blog/fluxo-de-trabalho-no-git) 58 | - 📝 [Aprenda Git e seus principais comandos](https://pythonacademy.com.br/blog/git-e-seus-principais-comandos) 59 | - 📝 [Python 3.10: funcionalidades e novidades da versão](https://pythonacademy.com.br/blog/python-3-10-o-que-ha-de-novo) 60 | - 📝 [Introdução à Programação Orientada a Objetos no Python](https://pythonacademy.com.br/blog/introducao-a-programacao-orientada-a-objetos-no-python) 61 | - 📝 [Filtros, Busca e Ordenação no Django REST Framework](https://pythonacademy.com.br/blog/filtros-busca-e-ordenacao-no-drf) 62 | - 📝 [Construa APIs com Django e Django REST Framework](https://pythonacademy.com.br/blog/construcao-de-apis-com-django-rest-framework) 63 | - 📝 [Biblioteca itertools do Python](https://pythonacademy.com.br/blog/a-biblioteca-itertools-do-python) 64 | - 📝 [Manipulação de Strings com f-strings no Python](https://pythonacademy.com.br/blog/f-strings-no-python) 65 | - 📝 [Dict Comprehension (compreensão de dict) no Python](https://pythonacademy.com.br/blog/dict-comprehensions-no-python) 66 | - 📝 [List Comprehensions (compreensão de listas) no Python](https://pythonacademy.com.br/blog/list-comprehensions-no-python) 67 | - 📝 [Iterators e Generators do Python](https://pythonacademy.com.br/blog/iterators-e-generators-em-python) 68 | - 📝 [A Camada Template do Django (Python)](https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-template) 69 | - 📝 [Como Criar Middlewares no Django (Python)](https://pythonacademy.com.br/blog/como-criar-middlewares-no-django) 70 | - 📝 [Como Criar Formulários no Django (Python)](https://pythonacademy.com.br/blog/formularios-do-django-com-django-forms) 71 | - 📝 [A Camada View do Django (Python)](https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-view) 72 | - 📝 [Comando migrate do Django (Python)](https://pythonacademy.com.br/blog/o-comando-migrate-do-django) 73 | - 📝 [Comando makemigrations do Django (Python)](https://pythonacademy.com.br/blog/o-comando-makemigrations-do-django) 74 | - 📝 [A Camada Model do Django (Python)](https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-model) 75 | - 📝 [Desenvolvimento Web com Python e Django](https://pythonacademy.com.br/blog/desenvolvimento-web-com-python-e-django-introducao) 76 | - 📝 [5 motivos para aprender Python AGORA!](https://pythonacademy.com.br/blog/porque-aprender-python-5-motivos-para-aprender-agora) 77 | - 📝 [Crie jogos com Kivy e Python](https://pythonacademy.com.br/blog/como-criar-jogos-com-python-e-kivy) 78 | - 📝 [Desenvolva Apps para Android e iOS com Python e Kivy](https://pythonacademy.com.br/blog/desenvolva-aplicativos-para-android-ios-com-python-e-kivy) 79 | - 📝 [Aprenda como utilizar Decorators no Python](https://pythonacademy.com.br/blog/domine-decorators-em-python) 80 | - 📝 [Ambientes Virtuais com Python e Virtualenv](https://pythonacademy.com.br/blog/python-e-virtualenv-como-programar-em-ambientes-virtuais) 81 | - 📝 [Guia de instalação do Python no Linux](https://pythonacademy.com.br/blog/como-instalar-python-no-linux) 82 | -------------------------------------------------------------------------------- /audio-para-texto/README.md: -------------------------------------------------------------------------------- 1 | # Conversão de Áudio em Texto (_Speech to Text_)! 2 | 3 | Essa dica ensina como podemos converter arquivos de áudio para texto utilizando a biblioteca Speech Recognition! 4 | 5 | Para executar o programa: 6 | 7 | - Crie um ambiente virtual (_Não sabe como?_, leia esse post: [Python e Virtualenv: Como programar em Ambientes Virtuais](https://pythonacademy.com.br/blog/python-e-virtualenv-como-programar- em-ambientes-virtuais)); 8 | - Instale as dependências com `pip install -r requirements.txt`. 9 | - Execute o código com `python main.py`. 10 | -------------------------------------------------------------------------------- /audio-para-texto/audio.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PythonAcademyBrasil/Dicas/b83c2dd8f2039d5c073c8f089f277303976c4fa0/audio-para-texto/audio.wav -------------------------------------------------------------------------------- /audio-para-texto/main.py: -------------------------------------------------------------------------------- 1 | import speech_recognition as sr 2 | 3 | if __name__ == '__main__': 4 | try: 5 | # Instancia a classe Recognizer 6 | r = sr.Recognizer() 7 | 8 | # Lê o arquivo de áudio 9 | with sr.AudioFile("./audio.wav") as fonte: 10 | audio = r.record(fonte) 11 | 12 | # Utiliza o Google Speech Recognition para fazer a conversão 13 | # Utiliza a chave de API padrão do próprio Speech Recognition 14 | # Para utilizar uma chave própria (recomendada), acesse a documentação 15 | texto = r.recognize_google(audio, language='pt-br') 16 | print(f'Google Speech Recognition acha que você disse: \n"{texto}"') 17 | 18 | except sr.UnknownValueError: 19 | print('Google Speech Recognition não entendeu seu áudio') 20 | 21 | except sr.RequestError as e: 22 | print(f'Não foi possível se conectar à API da Google. Erro: {str(e)}') 23 | -------------------------------------------------------------------------------- /audio-para-texto/requirements.txt: -------------------------------------------------------------------------------- 1 | SpeechRecognition==3.8.1 2 | 3 | -------------------------------------------------------------------------------- /automacao-com-selenium/README.md: -------------------------------------------------------------------------------- 1 | # Automação com Selenium 2 | 3 | Essa dica ensina como podemos automatizar aplicações web utilizando o Selenium! 4 | 5 | Para executar o programa: 6 | 7 | - Crie um ambiente virtual (_Não sabe como?_, leia esse post: [Python e Virtualenv: Como programar em Ambientes Virtuais](https://pythonacademy.com.br/blog/python-e-virtualenv-como-programar- em-ambientes-virtuais)); 8 | - Instale as dependências com `pip install -r requirements.txt`. 9 | - Execute o código com `python main.py`. 10 | -------------------------------------------------------------------------------- /automacao-com-selenium/driver/blank: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PythonAcademyBrasil/Dicas/b83c2dd8f2039d5c073c8f089f277303976c4fa0/automacao-com-selenium/driver/blank -------------------------------------------------------------------------------- /automacao-com-selenium/main.py: -------------------------------------------------------------------------------- 1 | from selenium.webdriver.chrome.service import Service 2 | from selenium.webdriver.common.by import By 3 | from selenium.common.exceptions import ElementNotInteractableException 4 | from selenium import webdriver 5 | 6 | # Cria um Service para gerenciar o WebDriver (aquele baixado anteriormente) 7 | service = Service('./driver/chromedriver') 8 | options = webdriver.ChromeOptions() 9 | 10 | # DESCOMENTE A LINHA ABAIXO caso queira habilitar o "modo silencioso" 11 | # options.headless = True 12 | 13 | driver = webdriver.Chrome(service=service, options=options) 14 | 15 | # Navega para o site Canaltech e expande a tela 16 | driver.get('https://canaltech.com.br/') 17 | driver.set_window_size(width=1900, height=1080) 18 | 19 | # Navega pela página buscando o banner das Principais Notícias 20 | secao_noticias = driver.find_element(By.XPATH, '/html/body/main/section[1]') 21 | noticias = secao_noticias.find_elements(By.CLASS_NAME, 'feature-item') 22 | 23 | # Pega a lista de Links através dos atributos "href" das tags 24 | links = [n.get_attribute('href') for n in noticias] 25 | 26 | try: 27 | # Itera sobre os links, navegando para a página da notícia a cada elemento 28 | for link in links: 29 | driver.get(link) 30 | 31 | secoes = driver.find_elements(By.TAG_NAME, 'section') 32 | titulo = secoes[0].find_element(By.TAG_NAME, 'h1').text 33 | descricao = secoes[1].find_elements(By.TAG_NAME, 'p')[1].text 34 | 35 | print(f'\n\nTÍTULO: {titulo}\nDESCRIÇÃO:\n\t{descricao}\n\tLINK: {link}') 36 | except ElementNotInteractableException: 37 | pass 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /automacao-com-selenium/requirements.txt: -------------------------------------------------------------------------------- 1 | selenium 2 | -------------------------------------------------------------------------------- /barra-de-progresso/README.md: -------------------------------------------------------------------------------- 1 | # Barra de Progresso com TQDM 2 | 3 | Essa dica demonstra como adicionar Barras de Progresso a scripts Python utilizando o TQDM. 4 | 5 | Para executar o programa: 6 | 7 | - Crie um ambiente virtual (_Não sabe como?_, leia esse post: [Python e Virtualenv: Como programar em Ambientes Virtuais](https://pythonacademy.com.br/blog/python-e-virtualenv-como-programar-em-ambientes-virtuais)); 8 | - Instale as dependências com `pip install -r requirements.txt`. 9 | - Execute o código com `python main.py`. 10 | -------------------------------------------------------------------------------- /barra-de-progresso/main.py: -------------------------------------------------------------------------------- 1 | from tqdm import tqdm 2 | 3 | if __name__ == '__main__': 4 | numeros = range(int(10e7)) 5 | for i in tqdm(numeros, colour='blue', desc="Processando"): 6 | pass 7 | -------------------------------------------------------------------------------- /barra-de-progresso/requirements.txt: -------------------------------------------------------------------------------- 1 | tqdm 2 | -------------------------------------------------------------------------------- /dados-em-tabelas/README.md: -------------------------------------------------------------------------------- 1 | # Dados em tabela com `tabulate` 2 | 3 | Essa dica demonstra como formatar dados em tabelas utilizando o `tabulate` e ainda colorir a saída do terminal, utilizando `termcolor`! 4 | 5 | Para executar o programa: 6 | 7 | - Crie um ambiente virtual (_Não sabe como?_, leia esse post: [Python e Virtualenv: Como programar em Ambientes Virtuais](https://pythonacademy.com.br/blog/python-e-virtualenv-como-programar-em-ambientes-virtuais)); 8 | - Instale as dependências com `pip install -r requirements.txt`. 9 | - Execute o código com `python tabela.py` 10 | - Para a versão **colorida**, execute `python tabela_colorida.py` 11 | -------------------------------------------------------------------------------- /dados-em-tabelas/requirements.txt: -------------------------------------------------------------------------------- 1 | tabulate 2 | termcolor 3 | -------------------------------------------------------------------------------- /dados-em-tabelas/tabela.py: -------------------------------------------------------------------------------- 1 | from tabulate import tabulate 2 | 3 | cabecalho = ["Planeta", "Raio (km)", "Massa (x 10^21 kg)"] 4 | tabela = [ 5 | ["Sol", 696000, 1989100000], 6 | ["Mercúrio", 2439, 330], 7 | ["Vênus", 6051, 641], 8 | ["Terra", 6371, 5973.6], 9 | ["Marte", 3390, 641.85], 10 | ["Júpiter", 69911, 1898600], 11 | ["Saturno", 58232, 568460], 12 | ["Urano", 25362, 86832], 13 | ["Netuno", 24622, 102430], 14 | ] 15 | 16 | print(tabulate(tabela, headers=cabecalho, tablefmt="fancy_grid")) 17 | 18 | 19 | -------------------------------------------------------------------------------- /dados-em-tabelas/tabela_colorida.py: -------------------------------------------------------------------------------- 1 | from tabulate import tabulate 2 | from termcolor import colored 3 | 4 | 5 | def cria_cabecalho(): 6 | header = ["Planeta", "Raio (km)", "Massa (x 10^29 kg)"] 7 | 8 | return [colored(c, 'cyan', attrs=['bold']) for c in header] 9 | 10 | 11 | def cria_tabela(): 12 | tabela = [ 13 | ["Sol", 696000, 1989100000], 14 | ["Mercúrio", 2439, 330], 15 | ["Vênus", 6051, 641], 16 | ["Terra", 6371, 5973.6], 17 | ["Marte", 3390, 641.85], 18 | ["Júpiter", 69911, 1898600], 19 | ["Saturno", 58232, 568460], 20 | ["Urano", 25362, 86832], 21 | ["Netuno", 24622, 102430]] 22 | 23 | return[ 24 | [colored(d[0], 'yellow', attrs=['bold']), d[1], d[2]] for d in tabela 25 | ] 26 | 27 | 28 | print(tabulate(cria_tabela(), headers=cria_cabecalho(), tablefmt="fancy_grid")) 29 | -------------------------------------------------------------------------------- /extraindo-audio-de-videos/Linkin_Park_Numb.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PythonAcademyBrasil/Dicas/b83c2dd8f2039d5c073c8f089f277303976c4fa0/extraindo-audio-de-videos/Linkin_Park_Numb.mp4 -------------------------------------------------------------------------------- /extraindo-audio-de-videos/README.md: -------------------------------------------------------------------------------- 1 | # Extraindo Áudio de Vídeos 2 | 3 | Essa dica vai te ensinar como extrair Áudio de Vídeos com pouqíssimas linhas de código Python. 4 | 5 | Para executar o programa: 6 | 7 | - Crie um ambiente virtual (_Não sabe como?_, leia esse post: [Python e Virtualenv: Como programar em Ambientes Virtuais](https://pythonacademy.com.br/blog/python-e-virtualenv-como-programar-em-ambientes-virtuais)); 8 | - Instale as dependências com `pip install -r requirements.txt`. 9 | - Execute o código com `python main.py`. 10 | -------------------------------------------------------------------------------- /extraindo-audio-de-videos/main.py: -------------------------------------------------------------------------------- 1 | from moviepy.video.io.VideoFileClip import VideoFileClip 2 | 3 | # Carrega um arquivo de vídeo 4 | video = VideoFileClip('Linkin_Park_Numb.mp4') 5 | 6 | # Passe como parâmetro qual será o arquivo de saída 7 | video.audio.write_audiofile('Linkin_Park_Numb.mp3') 8 | 9 | -------------------------------------------------------------------------------- /extraindo-audio-de-videos/requirements.txxt: -------------------------------------------------------------------------------- 1 | moviepy 2 | -------------------------------------------------------------------------------- /gerando-arquivos-pdf/README.md: -------------------------------------------------------------------------------- 1 | # Geração de Arquivos em PDF 2 | 3 | Essa Dica da Python Academy ensina a gerar arquivos PDF através de páginas HTML! 4 | 5 | Para executar essa Dica: 6 | 7 | - Vamos precisar instalar o `wkhtmltopdf` primeiro: 8 | - Linux: `sudo apt install wkhtmltopdf` 9 | - Windows: acesse [esse link para realizar o download do instalador](https://wkhtmltopdf.org/downloads.html) 10 | - Mac: acesse [esse link para realizar o download do .pkg](https://wkhtmltopdf.org/downloads.html) 11 | - Crie um ambiente virtual (_Não sabe como?_, leia esse post: [Python e Virtualenv: Como programar em Ambientes Virtuais](https://pythonacademy.com.br/blog/python-e-virtualenv-como-programar-em-ambientes-virtuais)); 12 | - Instale as dependências com `pip install -r requirements.txt`. 13 | - Execute o código com `python main.py`. 14 | -------------------------------------------------------------------------------- /gerando-arquivos-pdf/assets/estilos.css: -------------------------------------------------------------------------------- 1 | body { 2 | color: #444; 3 | } 4 | 5 | h1 { 6 | font-family: 'Helvetica', sans-serif; 7 | font-size: 24px; 8 | margin-bottom: 36px; 9 | } 10 | 11 | p, li { 12 | font-size: 20px; 13 | line-height: 30px; 14 | } 15 | 16 | code { 17 | background: #eee; 18 | padding: 2px 6px; 19 | border: 1px solid #ccc; 20 | position: relative; 21 | bottom: 2px; 22 | border-radius: 6px; 23 | } 24 | 25 | .logo { 26 | text-align: center; 27 | margin-bottom: 48px; 28 | } 29 | 30 | .grafico { 31 | text-align: center; 32 | } 33 | 34 | .mb { 35 | margin-bottom: 64px; 36 | } 37 | -------------------------------------------------------------------------------- /gerando-arquivos-pdf/assets/grafico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PythonAcademyBrasil/Dicas/b83c2dd8f2039d5c073c8f089f277303976c4fa0/gerando-arquivos-pdf/assets/grafico.png -------------------------------------------------------------------------------- /gerando-arquivos-pdf/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PythonAcademyBrasil/Dicas/b83c2dd8f2039d5c073c8f089f277303976c4fa0/gerando-arquivos-pdf/assets/logo.png -------------------------------------------------------------------------------- /gerando-arquivos-pdf/assets/pagina.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Title 6 | 7 | 8 | 9 | 14 | 15 |

Geração de Arquivos PDF utilizando pdfkit

16 | 17 |

18 | Com o pdfkit é possível gerar arquivos PDFs a partir de código HTML. 19 | Também é possível estilizar o arquivo utilizando CSS! 20 |

21 | 22 |

Com pdfkit é possível gerar arquivos PDF a partir de:

23 | 28 | 29 |

Podemos incluir imagens, bastando convertê-las para base64!

30 | 31 |

Olha como fica:

32 | 33 |
34 | Grafico 35 |
36 | 37 |

Pense nas possibilidades!!

38 | 39 |

Que tal gerar um relatório automatizado utilizando Python e pdfkit e surpreender seu chefe? (*.*)

40 | 41 |
42 | Esse arquivo foi gerado através do código disponível na Dica de Python da página Python Academy!
43 | Para acessá-la, clique aqui! 44 |
45 | 46 | 47 | -------------------------------------------------------------------------------- /gerando-arquivos-pdf/main.py: -------------------------------------------------------------------------------- 1 | import pdfkit 2 | 3 | # Converte o HTML em PDF utilizando o pdfkit 4 | pdfkit.from_file( 5 | input='assets/pagina.html', 6 | output_path='saida.pdf', 7 | css='assets/estilos.css', 8 | options={ 9 | 'page-size': 'A4', 10 | 'margin-top': '0.5in', 11 | 'margin-right': '0.5in', 12 | 'margin-bottom': '0.5in', 13 | 'margin-left': '0.5in', 14 | 'encoding': 'UTF-8' 15 | } 16 | ) 17 | -------------------------------------------------------------------------------- /gerando-arquivos-pdf/requirements.txt: -------------------------------------------------------------------------------- 1 | pdfkit 2 | -------------------------------------------------------------------------------- /gerando-arquivos-pdf/saida.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PythonAcademyBrasil/Dicas/b83c2dd8f2039d5c073c8f089f277303976c4fa0/gerando-arquivos-pdf/saida.pdf -------------------------------------------------------------------------------- /graficos-com-matplotlib/main.py: -------------------------------------------------------------------------------- 1 | import matplotlib.pyplot as plt 2 | 3 | # Trata o arquivo CSV de entrada 4 | with open('dados/Falsificacao_Dados_Abertos.csv', 'r') as arquivo: 5 | linhas = arquivo.readlines() 6 | 7 | # Utiliza List Comprehensions pra iterar sobre todas as linhas 8 | # removendo os '\n' e dividindo a string no ponto e vírgula 9 | conteudo = [linha.replace('\n', '').split(';') for linha in linhas] 10 | 11 | # Dicionário de resultados no formato: 12 | # resultado = { 13 | # "{ano com 2 dígitos}": {quantidade de cédulas totais}, 14 | # "{ano com 2 dígitos}": {quantidade de cédulas totais}, 15 | # ... 16 | # } 17 | resultado = {} 18 | 19 | # Trata o resultado, adicionando valores ao dict "resultado" 20 | for linha in conteudo: 21 | ano = linha[0][2:] 22 | quantidade = float(linha[4].replace('.', '').replace(',', '.')) 23 | 24 | try: 25 | resultado[ano] = resultado[ano] + quantidade 26 | except KeyError: 27 | resultado[ano] = 0 28 | resultado[ano] = resultado[ano] + quantidade 29 | 30 | 31 | # Cria o Eixo X com os "ANOS" 32 | eixo_x = list(resultado.keys()) 33 | 34 | # Cria o Eixo Y com os a Quantidade de Cédulas 35 | eixo_y = list(resultado.values()) 36 | 37 | # Cria um Figure e um Axes (classes do Matplotlib) 38 | figura, eixos = plt.subplots() 39 | 40 | # Plota os pontos e adicina rótulo ao conjunto de dados 41 | eixos.plot(eixo_x, eixo_y, label='Número total de cédulas falsificadas') 42 | 43 | # Mostra a "grid" (linhas horizontais e verticais) 44 | eixos.grid(True) 45 | 46 | # Adiciona rótulos nos Eixos X e Y 47 | eixos.set_xlabel('Ano') 48 | eixos.set_ylabel('Quantidade de Cédulas Falsificadas') 49 | 50 | # Adiciona rótulo superior 51 | eixos.set_title("Cédulas Falsificadas no Brasil") 52 | 53 | # Adiciona legenda 54 | eixos.legend() 55 | 56 | # Por fim, mostra o resultado em tela =D 57 | plt.show() 58 | -------------------------------------------------------------------------------- /graficos-com-matplotlib/requirements.txt: -------------------------------------------------------------------------------- 1 | matplotlib 2 | -------------------------------------------------------------------------------- /manipulando-arquivos-excel/README.md: -------------------------------------------------------------------------------- 1 | # Manipulação de Arquivos do Excel 2 | 3 | Essa Dica da Python Academy ensina a gerar e manipular arquivos do Excel apenas utilizando código Python! 4 | 5 | Para executar essa Dica: 6 | 7 | - Crie um ambiente virtual (_Não sabe como?_, leia esse post: [Python e Virtualenv: Como programar em Ambientes Virtuais](https://pythonacademy.com.br/blog/python-e-virtualenv-como-programar-em-ambientes-virtuais)); 8 | - Instale as dependências com `pip install -r requirements.txt`. 9 | - Execute o código com `python main.py`. 10 | -------------------------------------------------------------------------------- /manipulando-arquivos-excel/data/mock_data.csv: -------------------------------------------------------------------------------- 1 | tstigers0@msn.com,9084.35,1 2 | mmarns1@mit.edu,7686.98,4 3 | jtrollope2@cornell.edu,6192.01,3 4 | gsuche3@msn.com,8230.98,1 5 | egoodrick4@newsvine.com,6593.35,3 6 | ntupling5@edublogs.org,9054.87,2 7 | gomara6@discovery.com,9430.42,3 8 | alabusch7@barnesandnoble.com,5877.01,2 9 | sscurrah8@noaa.gov,8499.07,4 10 | kmoreinis9@rediff.com,8360.89,2 11 | lginitya@un.org,6370.23,1 12 | dwillicottb@comsenz.com,5729.62,3 13 | gbenardc@usnews.com,6694.75,4 14 | jroughand@woothemes.com,6202.94,1 15 | vferraresie@studiopress.com,6303.89,1 16 | agrevattf@instagram.com,6599.86,1 17 | sbruffg@epa.gov,7624.85,4 18 | rtassellh@mozilla.com,8168.5,2 19 | whupkai@bbc.co.uk,8038.02,4 20 | lhecknerj@howstuffworks.com,7669.1,2 21 | kkinmondk@independent.co.uk,8687.46,2 22 | glamlinl@soundcloud.com,8708.24,3 23 | lrevillem@census.gov,8616.07,3 24 | bpelhamn@fastcompany.com,6690.03,2 25 | ecodrono@imgur.com,7275.7,1 26 | mdurstonp@mac.com,8897.27,2 27 | cleyfieldq@dyndns.org,5787.83,1 28 | eellerkerr@mlb.com,7864.46,1 29 | sreddishs@sbwire.com,5335.62,5 30 | lmcneachtaint@bluehost.com,8737.7,5 31 | kblitzu@sakura.ne.jp,6901.52,4 32 | mshearsv@bloglovin.com,7768.86,3 33 | gnapierw@yellowpages.com,9176.99,1 34 | dgirardx@ibm.com,9242.82,3 35 | jkitleey@imgur.com,7260.12,4 36 | tgennrichz@intel.com,6061.89,3 37 | hivachyov10@last.fm,6409.17,2 38 | blesly11@weather.com,8028.66,2 39 | cdemicoli12@ucla.edu,9111.34,4 40 | ransett13@yellowpages.com,8778.33,3 41 | cgreensides14@umich.edu,8314.34,2 42 | kmckeaney15@vimeo.com,5930.52,4 43 | pkennealy16@unicef.org,9469.53,1 44 | epitway17@blinklist.com,6089.77,3 45 | dkettow18@vistaprint.com,7204.47,5 46 | getteridge19@friendfeed.com,6807.25,2 47 | cmckag1a@lycos.com,7267.33,3 48 | sdoctor1b@digg.com,7310.87,1 49 | purling1c@slideshare.net,8426.49,1 50 | gdacca1d@slate.com,9342.0,5 51 | sgathwaite1e@flickr.com,6742.65,1 52 | bshilito1f@paypal.com,6133.55,3 53 | kstyles1g@devhub.com,9434.6,4 54 | lwickendon1h@dagondesign.com,6815.18,5 55 | eautry1i@csmonitor.com,7576.15,2 56 | jwhitehurst1j@webnode.com,8241.95,4 57 | pofeeny1k@youtube.com,7726.36,1 58 | cgabits1l@pinterest.com,9349.25,4 59 | rdaud1m@lycos.com,9024.03,4 60 | rwalter1n@vkontakte.ru,9187.38,2 61 | gvasnetsov1o@cisco.com,5985.56,5 62 | wwilleson1p@netvibes.com,9011.11,3 63 | amaddison1q@google.com.hk,9274.5,1 64 | sdavley1r@example.com,5480.09,5 65 | mgoldney1s@clickbank.net,7795.45,1 66 | shumfrey1t@hubpages.com,5095.93,1 67 | esquier1u@dell.com,8651.15,2 68 | dslade1v@goo.gl,5541.76,5 69 | mbill1w@marriott.com,5325.58,3 70 | vmalimoe1x@mapquest.com,9052.82,3 71 | hwerny1y@deviantart.com,8749.78,3 72 | dkaspar1z@prlog.org,8202.27,5 73 | dbarzen20@admin.ch,6358.23,4 74 | mpetren21@nature.com,6457.18,4 75 | dsikorski22@tmall.com,9318.25,3 76 | dmuston23@sitemeter.com,6743.8,1 77 | tdurnford24@tumblr.com,8599.51,2 78 | lbetts25@so-net.ne.jp,5880.88,4 79 | mdeason26@wikia.com,9102.77,5 80 | eolyfant27@nytimes.com,6453.64,3 81 | aturbefield28@deviantart.com,7208.74,1 82 | opopland29@chronoengine.com,5348.83,3 83 | ykubat2a@liveinternet.ru,9414.08,3 84 | rlucken2b@chicagotribune.com,6214.23,2 85 | ballebone2c@businessinsider.com,6571.34,3 86 | tprosch2d@twitpic.com,5176.79,3 87 | ttodarini2e@vistaprint.com,5533.64,1 88 | jcancelier2f@umich.edu,5987.94,2 89 | lrabjohns2g@desdev.cn,9166.25,4 90 | nodney2h@whitehouse.gov,5364.31,2 91 | bpepin2i@mayoclinic.com,5026.38,1 92 | wcousens2j@dmoz.org,7217.02,4 93 | lzuenelli2k@mtv.com,6838.48,3 94 | lkynd2l@github.com,8082.99,5 95 | jcressor2m@acquirethisname.com,8736.93,1 96 | dcapener2n@netvibes.com,5884.54,4 97 | kpetzolt2o@technorati.com,7331.59,4 98 | pcorck2p@examiner.com,7383.73,5 99 | cpoznanski2q@liveinternet.ru,7648.16,2 100 | jlively2r@4shared.com,6384.26,5 101 | ecashley2s@privacy.gov.au,5212.25,4 102 | pbutt2t@pcworld.com,7883.43,4 103 | bfulks2u@bizjournals.com,9353.38,4 104 | kgerholz2v@virginia.edu,6453.94,4 105 | tgodding2w@sakura.ne.jp,7776.48,3 106 | zlaughlan2x@squidoo.com,8595.74,3 107 | mdeem2y@berkeley.edu,7125.8,4 108 | cclaricoates2z@patch.com,8584.99,3 109 | kfoye30@wp.com,6094.49,4 110 | dramard31@economist.com,8183.96,2 111 | ikeirle32@tmall.com,6551.5,4 112 | uclawe33@boston.com,9248.77,5 113 | craffin34@wp.com,8644.51,3 114 | brosenau35@gmpg.org,5797.87,3 115 | skirwin36@ftc.gov,6148.46,4 116 | atallman37@cocolog-nifty.com,6173.32,4 117 | rpuddle38@i2i.jp,8268.54,5 118 | estenton39@posterous.com,6273.69,2 119 | jbearn3a@ycombinator.com,8556.38,1 120 | ibasinigazzi3b@yahoo.co.jp,5093.34,2 121 | etocknell3c@geocities.com,6476.81,1 122 | cventam3d@flavors.me,6949.18,3 123 | sleftwich3e@java.com,7901.91,4 124 | obeardwood3f@pcworld.com,5357.33,4 125 | emellon3g@wikia.com,8306.02,2 126 | dconant3h@w3.org,5937.62,1 127 | oskilton3i@statcounter.com,8211.8,3 128 | ecarlsson3j@ox.ac.uk,8777.54,1 129 | cverrell3k@intel.com,7757.87,1 130 | dsare3l@cdbaby.com,7581.41,2 131 | cgownge3m@ted.com,6170.43,3 132 | bgrishanin3n@disqus.com,7894.97,1 133 | atuminini3o@wsj.com,9109.27,4 134 | ahalle3p@forbes.com,8789.97,5 135 | gjennings3q@google.com.br,7790.1,4 136 | gshadrach3r@tumblr.com,9102.28,5 137 | acorde3s@xing.com,8962.2,1 138 | lshotton3t@dyndns.org,6817.62,3 139 | gmatasov3u@jimdo.com,8383.54,2 140 | broantree3v@moonfruit.com,8878.51,5 141 | mhammond3w@yellowpages.com,5874.67,1 142 | mspaducci3x@ebay.com,9168.84,3 143 | tscaplehorn3y@nifty.com,6999.9,4 144 | dbaldocci3z@mozilla.org,7518.92,2 145 | gquaife40@vinaora.com,5861.96,5 146 | ecoatts41@unicef.org,8579.77,5 147 | kproback42@earthlink.net,6895.39,1 148 | atibbles43@sphinn.com,6212.32,4 149 | bjerosch44@mtv.com,8811.38,3 150 | lmckeever45@economist.com,8939.19,5 151 | bmorigan46@squarespace.com,8964.51,2 152 | vdome47@biblegateway.com,8276.6,3 153 | troycroft48@hostgator.com,6598.95,1 154 | dcowx49@loc.gov,9084.69,3 155 | ddyas4a@cmu.edu,8971.66,1 156 | mnicholls4b@imdb.com,9264.09,5 157 | elaugharne4c@etsy.com,5873.77,3 158 | dphiller4d@yale.edu,8723.09,2 159 | jlinne4e@seattletimes.com,7394.94,4 160 | jmoorman4f@businessweek.com,7488.12,4 161 | mnelthorpe4g@dot.gov,5441.87,5 162 | mlacroix4h@archive.org,8882.42,4 163 | rchiles4i@nhs.uk,6102.07,4 164 | dsmails4j@ucla.edu,7230.92,4 165 | orumbold4k@webeden.co.uk,6789.76,3 166 | ngildroy4l@sbwire.com,8486.14,3 167 | kalliband4m@time.com,5311.29,1 168 | scaron4n@constantcontact.com,7312.88,3 169 | sdrei4o@github.com,6934.38,5 170 | acaltun4p@nba.com,5263.9,4 171 | gottiwill4q@reddit.com,6811.37,3 172 | ealdcorne4r@webeden.co.uk,6582.63,2 173 | tklemps4s@mit.edu,6760.88,5 174 | eough4t@adobe.com,5207.33,2 175 | calwen4u@a8.net,5497.07,2 176 | bcockren4v@mediafire.com,8782.44,2 177 | ghinkins4w@google.cn,5240.11,2 178 | bcourtes4x@twitter.com,6543.95,4 179 | ddik4y@bizjournals.com,6757.07,3 180 | ashafier4z@flavors.me,8316.4,5 181 | rconradie50@mozilla.org,8475.72,4 182 | cbernardo51@geocities.jp,9375.44,1 183 | lmusslewhite52@youku.com,7974.28,4 184 | jkloska53@umn.edu,6903.2,1 185 | bbilbie54@nps.gov,9431.5,1 186 | aworg55@ycombinator.com,6039.18,1 187 | ksleeman56@hao123.com,5462.41,3 188 | ckillingworth57@senate.gov,9304.61,4 189 | siffe58@senate.gov,5335.51,4 190 | fpainter59@tripod.com,5186.9,3 191 | ihenriksson5a@elpais.com,6793.53,1 192 | gsimonds5b@jugem.jp,6235.11,2 193 | sdaubney5c@yelp.com,9213.34,5 194 | bshervington5d@liveinternet.ru,8902.28,2 195 | ecarless5e@who.int,6969.42,1 196 | dteaser5f@tinyurl.com,8019.91,5 197 | bshefton5g@cbsnews.com,5652.74,1 198 | hpurchase5h@cnbc.com,9440.79,2 199 | spailin5i@stumbleupon.com,8934.75,4 200 | hforst5j@engadget.com,9006.34,4 201 | lcreffield5k@rambler.ru,8356.03,5 202 | ncreyke5l@omniture.com,6766.67,4 203 | tarnison5m@facebook.com,5211.79,5 204 | npidgeon5n@oaic.gov.au,8979.81,1 205 | mparcells5o@amazon.co.uk,9298.61,4 206 | trandle5p@1688.com,7973.34,5 207 | gdurgan5q@princeton.edu,9403.46,1 208 | gstembridge5r@ning.com,8412.76,2 209 | wflowers5s@360.cn,6018.04,3 210 | cgavey5t@smugmug.com,9470.73,5 211 | llawland5u@walmart.com,6193.86,2 212 | dvanshin5v@dyndns.org,7774.65,5 213 | trheaume5w@exblog.jp,6090.73,1 214 | smadocjones5x@irs.gov,5203.66,1 215 | lpere5y@artisteer.com,6633.13,1 216 | psollner5z@networksolutions.com,9038.57,5 217 | rwoodcock60@unblog.fr,7686.02,5 218 | mrihosek61@phpbb.com,8187.87,1 219 | athibodeaux62@addtoany.com,5774.14,5 220 | khaselden63@123-reg.co.uk,7217.6,1 221 | bmcfade64@feedburner.com,5627.75,4 222 | kadds65@businessinsider.com,7276.24,2 223 | ecory66@wix.com,7418.91,4 224 | rglason67@thetimes.co.uk,5201.61,4 225 | dgibben68@sun.com,6295.44,4 226 | ddugood69@constantcontact.com,6243.37,5 227 | cguyer6a@netlog.com,8964.28,4 228 | gharower6b@tuttocitta.it,7953.87,4 229 | lclemmitt6c@indiegogo.com,5498.96,2 230 | apedrielli6d@wikispaces.com,6316.54,3 231 | dblenkinsop6e@unc.edu,6708.58,4 232 | psilverlock6f@columbia.edu,6933.18,1 233 | aheakey6g@cloudflare.com,8370.84,1 234 | rbanfill6h@cbslocal.com,6606.46,1 235 | afortoun6i@histats.com,6549.55,4 236 | ddowdell6j@constantcontact.com,7805.68,2 237 | bantal6k@chronoengine.com,6934.51,4 238 | rgerish6l@fastcompany.com,7965.94,4 239 | ssugarman6m@wikispaces.com,7195.91,2 240 | ojablonski6n@ft.com,9119.29,1 241 | aselwood6o@opera.com,6524.58,2 242 | opiser6p@wunderground.com,8642.52,5 243 | chabishaw6q@squidoo.com,8122.73,1 244 | lkreber6r@google.nl,8606.38,4 245 | sshortell6s@twitter.com,6789.34,2 246 | miacovone6t@freewebs.com,5452.92,3 247 | bgilford6u@devhub.com,8904.76,3 248 | vharrald6v@delicious.com,6671.11,5 249 | cdebruin6w@plala.or.jp,7043.61,4 250 | tcordova6x@tamu.edu,6548.05,1 251 | -------------------------------------------------------------------------------- /manipulando-arquivos-excel/main.py: -------------------------------------------------------------------------------- 1 | from openpyxl import Workbook 2 | from openpyxl.styles import PatternFill, Alignment, Font 3 | 4 | # Cria a Planilha Excel 5 | arquivo_excel = Workbook() 6 | planilha = arquivo_excel.active 7 | planilha.title = "Dados" 8 | 9 | # Adiciona Cabeçalho (primeira linha) 10 | planilha.append(['Email', 'Valor Gasto', 'Qtde Itens', 'Valor médio por Item']) 11 | 12 | # Trata dados de entrada do arquivo CSV 13 | with open('./data/mock_data.csv') as csv: 14 | dados_arquivo = [linha.replace('\n', '').split(',') for linha in csv.readlines()] 15 | 16 | # Itera sobre os dados do arquivo CSV, adicionando-os à Planilha 17 | for dados in dados_arquivo: 18 | valor_gasto = float(dados[1]) 19 | qtde_itens = int(dados[2]) 20 | dados.append(f'{valor_gasto/qtde_itens:.2f}') 21 | dados[1] = valor_gasto 22 | dados[2] = qtde_itens 23 | 24 | planilha.append(dados) 25 | 26 | # Mescla células 27 | planilha.merge_cells('E1:F1') 28 | 29 | # Cria Header de Resumo 30 | header_resumo = planilha.cell(row=1, column=5) 31 | header_resumo.value = 'RESUMO PROCESSAMENTO' 32 | header_resumo.font = Font(name='Calibri', bold=True, color='FFFFFF') 33 | header_resumo.alignment = Alignment(horizontal='center', vertical='center') 34 | header_resumo.fill = PatternFill('solid', '222222') 35 | 36 | # Cria Subheader de Resumo do Valor Total 37 | subheader_valor = planilha.cell(row=2, column=5) 38 | subheader_valor.value = 'VALOR TOTAL' 39 | subheader_valor.fill = PatternFill('solid', '999999') 40 | 41 | # Cria Subheader de Resumo da Quantidade Total 42 | subheader_qtde = planilha.cell(row=2, column=6) 43 | subheader_qtde.value = 'QUANTIDADE TOTAL DE ITENS' 44 | subheader_qtde.fill = PatternFill('solid', '999999') 45 | 46 | # Cria Célula com Fórmula formatado para Moeda 47 | soma_valor = planilha.cell(row=3, column=5) 48 | soma_valor.value = '=SUM(B2:B251)' 49 | soma_valor.number_format = '[$R$-416]\\ #,##0.00' 50 | soma_valor.fill = PatternFill('solid', 'DDDDDD') 51 | 52 | # Cria Célula com Fórmula 53 | soma_qtde = planilha.cell(row=3, column=6) 54 | soma_qtde.value = '=SUM(C2:C251)' 55 | soma_qtde.fill = PatternFill('solid', 'DDDDDD') 56 | 57 | # Salva o arquivo XLSX de saída 58 | arquivo_excel.save("relatorio.xlsx") 59 | -------------------------------------------------------------------------------- /manipulando-arquivos-excel/requirements.txt: -------------------------------------------------------------------------------- 1 | openpyxl 2 | -------------------------------------------------------------------------------- /primeiro-webscraping/README.md: -------------------------------------------------------------------------------- 1 | # Seu primeiro Webscraping! 2 | 3 | Essa dica ensina como buscar dados de páginas web (o que chamamos de webscraping)! 4 | 5 | Para executar o programa: 6 | 7 | - Crie um ambiente virtual (_Não sabe como?_, leia esse post: [Python e Virtualenv: Como programar em Ambientes Virtuais](https://pythonacademy.com.br/blog/python-e-virtualenv-como-programar- em-ambientes-virtuais)); 8 | - Instale as dependências com `pip install -r requirements.txt`. 9 | - Execute o código com `python main.py`. 10 | -------------------------------------------------------------------------------- /primeiro-webscraping/main.py: -------------------------------------------------------------------------------- 1 | import requests 2 | from bs4 import BeautifulSoup 3 | 4 | # Necessário para correto funcionamento do script 5 | headers = {'User-Agent': 'Mozilla/5.0'} 6 | 7 | # Busca o código HTML da página que quer analisar 8 | pagina = requests.get('https://fundamentus.com.br/fii_resultado.php', headers=headers) 9 | 10 | # Instancie o BeautifulSoul, passando o HTML no construtor e o parser 11 | soup = BeautifulSoup(pagina.text, 'html.parser') 12 | 13 | # Ache o dado que quer na página (passo 2) 14 | dados = soup.find("table", {"id": "tabelaResultado"}).find('tbody').find_all('tr') 15 | 16 | # Agora é com você! ;) 17 | for fundo in dados: 18 | dados_fundo = fundo.find_all("td") 19 | print( 20 | f"[{dados_fundo[0].text}]\n" 21 | f"\tCotação: {dados_fundo[2].text}\n" 22 | f"\tSetor: {dados_fundo[1].text}\n" 23 | f"\tDY %: {dados_fundo[4].text}\n" 24 | f"\tP/VP: {dados_fundo[5].text}\n" 25 | ) 26 | -------------------------------------------------------------------------------- /primeiro-webscraping/requirements.txt: -------------------------------------------------------------------------------- 1 | requests 2 | beautifulsoup4 3 | -------------------------------------------------------------------------------- /reconhecimento-textual/README.md: -------------------------------------------------------------------------------- 1 | # Reconhecimento de Texto em Imagens (OCR)! 2 | 3 | Essa dica ensina como reconhecer textos em imagens, utilizando a técnica de Reconhecimento Ótico de Caracteres, ou OCR (Optical Character Recognition) 4 | 5 | Para executar o programa: 6 | 7 | - Crie um ambiente virtual (_Não sabe como?_, leia esse post: [Python e Virtualenv: Como programar em Ambientes Virtuais](https://pythonacademy.com.br/blog/python-e-virtualenv-como-programar- em-ambientes-virtuais)); 8 | - Instale as dependências com `pip install -r requirements.txt`. 9 | - Execute o código com `python main.py`. 10 | -------------------------------------------------------------------------------- /reconhecimento-textual/livro.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PythonAcademyBrasil/Dicas/b83c2dd8f2039d5c073c8f089f277303976c4fa0/reconhecimento-textual/livro.jpg -------------------------------------------------------------------------------- /reconhecimento-textual/main.py: -------------------------------------------------------------------------------- 1 | import easyocr 2 | 3 | # Define Português como idioma 4 | reader = easyocr.Reader(['pt']) 5 | 6 | # Lê a imagem 7 | resultados = reader.readtext('placas.jpg', paragraph=False) 8 | 9 | # Itera sobre o resultado 10 | for resultado in resultados: 11 | print(f'Texto encontrado:\n' 12 | f'\tPosição: {resultado[0]}\n' 13 | f'\tTexto: {resultado[1]}\n') 14 | -------------------------------------------------------------------------------- /reconhecimento-textual/placas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PythonAcademyBrasil/Dicas/b83c2dd8f2039d5c073c8f089f277303976c4fa0/reconhecimento-textual/placas.jpg -------------------------------------------------------------------------------- /reconhecimento-textual/requirements.txt: -------------------------------------------------------------------------------- 1 | easyocr 2 | -------------------------------------------------------------------------------- /requisicoes-paralelas/README.md: -------------------------------------------------------------------------------- 1 | # Requisições Paralelas com aiohttp 2 | 3 | Essa dica traz como realizar requisições paralelas com o aiohttp. 4 | 5 | Foram feitas mais de 150 requisições em menos de 1 segundo à uma API pública de Pokemons chamada [PokeAPI](https://pokeapi.co/). 6 | 7 | Para executar o programa: 8 | 9 | - Crie um ambiente virtual (_Não sabe como?_, leia esse post: [Python e Virtualenv: Como programar em Ambientes Virtuais](https://pythonacademy.com.br/blog/python-e-virtualenv-como-programar-em-ambientes-virtuais)); 10 | - Instale as dependências com `pip install -r requirements.txt`. 11 | - Execute o código com `python main.py`. 12 | -------------------------------------------------------------------------------- /requisicoes-paralelas/main.py: -------------------------------------------------------------------------------- 1 | import aiohttp 2 | import asyncio 3 | import time 4 | 5 | 6 | # Função para buscar um Pokemon 7 | async def busca_pokemon(session, url): 8 | async with session.get(url) as resp: 9 | pokemon = await resp.json() 10 | return pokemon['name'], resp.content_length 11 | 12 | 13 | async def main(): 14 | inicio = time.time() 15 | async with aiohttp.ClientSession() as session: 16 | tasks = [] 17 | for number in range(1, 152): 18 | url = f'https://pokeapi.co/api/v2/pokemon/{number}' 19 | tasks.append(asyncio.ensure_future(busca_pokemon(session, url))) 20 | 21 | # Dispara as requisições assíncronas 22 | respostas = await asyncio.gather(*tasks) 23 | 24 | # Itera sobre o retorno 25 | for pokemon, tamanho in respostas: 26 | print(f'Pokemon: {str(pokemon).capitalize()} ({tamanho} bytes)') 27 | 28 | total = sum([r[1] for r in respostas]) 29 | tempo_total = time.time() - inicio 30 | print(f'\n\n{len(respostas)} Requisições e {total} bytes baixados em {tempo_total:.3f}s') 31 | 32 | if __name__ == '__main__': 33 | asyncio.run(main()) 34 | -------------------------------------------------------------------------------- /requisicoes-paralelas/requirements.txt: -------------------------------------------------------------------------------- 1 | aiohttp 2 | -------------------------------------------------------------------------------- /texto-para-audio/README.md: -------------------------------------------------------------------------------- 1 | # Conversão de Texto para Áudio (_Text to Speech_)! 2 | 3 | Essa dica ensina como podemos converter texto para Áudio utilizando a biblioteca gTTS (Google Text To Speech) online, ou a pyttsx3, de modo offline! 4 | 5 | Para executar o programa: 6 | 7 | - Crie um ambiente virtual (_Não sabe como?_, leia esse post: [Python e Virtualenv: Como programar em Ambientes Virtuais](https://pythonacademy.com.br/blog/python-e-virtualenv-como-programar- em-ambientes-virtuais)); 8 | - Instale as dependências com `pip install -r requirements.txt`. 9 | - Execute o código com `python main.py`. 10 | -------------------------------------------------------------------------------- /texto-para-audio/main.py: -------------------------------------------------------------------------------- 1 | import gtts 2 | import pyttsx3 3 | from playsound import playsound 4 | 5 | # Escolha entre 'online' ou 'offline' 6 | MODO = 'online' 7 | TEXTO = """ 8 | Olá! Seja muito bem vindo à Dica de Conversão de Texto da Python Academy! 9 | Utilizamos a biblioteca gtts (Google Text to Speech) para esse objetivo. 10 | Não se esqueça que nossas Dicas estão disponíveis no Github da Python Academy, 11 | é só acessar github.com/PythonAcademyBrasil/Dicas. Te vejo lá! 12 | """ 13 | 14 | if __name__ == '__main__': 15 | # Utiliza o Google para realizar a tradução (requer conexão com Internet) 16 | if MODO == 'online': 17 | tts = gtts.gTTS(TEXTO, lang='pt-br') 18 | 19 | # Salva o arquivo de áudio 20 | tts.save("audio.mp3") 21 | 22 | # Toca o arquivo de áudio 23 | playsound("audio.mp3") 24 | 25 | # Utiliza as vozes disponíveis no Sistema Operacional 26 | elif MODO == 'offline': 27 | # Cria a Engine para processamento offline de acordo com as vozes 28 | # disponíveis em seu Sistema Operacional 29 | engine = pyttsx3.init() 30 | 31 | # > Descomente as 3 linhas abaixo para checar as "Voices" disponíveis 32 | # voices = engine.getProperty("voices") 33 | # for voice in voices: 34 | # print(voice.name) 35 | 36 | # 'brazil' é uma voz disponível no meu Sistema Operacional 37 | engine.setProperty("voice", 'brazil') 38 | 39 | # Configura o que deve ser dito 40 | engine.say(TEXTO) 41 | 42 | # Toca o áudio 43 | engine.runAndWait() 44 | 45 | -------------------------------------------------------------------------------- /texto-para-audio/requirements.txt: -------------------------------------------------------------------------------- 1 | gTTS 2 | pyttsx3 3 | playsound 4 | --------------------------------------------------------------------------------