---
# System prepended metadata

title: Grupo de estudos em Python - lendo e escrevendo arquivos

---

## Espaço de Tecnologias e Artes - Sesc Avenida Paulista 
### `hackmd.io/@sesc-av-paulista/estudos-em-python-7-maio`
# Grupo de estudos em Python 

- **O que eu preciso para começar?**
    - Vamos usar o **Thonny IDE**, que é livre já com um interpretador Python, você pode baixar em https://thonny.org
    - Como instalar bibliotecas no Thonny?
        - **Usando a interface gráfica** menu *Tools/Ferramentas > Manage Packages/Gerenciar Pacotes*
        - **Usando o shell aberto pelo Thonny** em *Tools > Open System Shell*
            - Como se faz em geral no Python: `pip install <nome da lib>`, mas idealmente você deve usar um "virtual environment" antes, só que no caso do Thonny provê já esse env

#### Outras referências
- Documentação oficial do Python: https://docs.python.org/pt-br/3/
- Livro Pense Python: https://penseallen.github.io/PensePython2e/ (introdutório)
- Tour redemoinho do Python: https://jakevdp.github.io/WhirlwindTourOfPython/
- Livro Python Fluente: https://pythonfluente.com/ (avançado)
- Para coisas com desenho (programação criativa) com Python: https://abav.lugaralgum.com/como-instalar-py5/


### 7/5 Lendo e escrevendo arquivos

- usando o `with open(...):` do Python
- Lendo e escrevendo arquivos de Word e de Excel!

### Usando `open()` com um gerenciador de contexto

- Razões e exemplos

    - 1° exemplo: 

``
```python=
nome = 'Oswaldo'
outro = "Lina"

varias_linhas = """Eu sou um
texto com
várias linhas
"""
linhas = "Oswald's single line\noutra linha"

print(varias_linhas)
with open('exemplo.txt', 'w') as saida:
   saida.write(varias_linhas)
   
print('acabou')   
   

```

- 2° exemplo:


```python=
with open('exemplo.txt', 'r') as entrada:
   leitor = entrada.readlines()
   for linha in leitor:
       print(linha, end='')
       #print(linha.rstrip())   
   

```


### Manipulando arquivos de Word e Excel

- Bibliotecas para instalar
**`python-docx`** para manipular Word
**`openpyxl`** para manipular Excel
- Livro "Automate the Boring Stuff" 
    - Word no final do capítulo https://automatetheboringstuff.com/2e/chapter15/
    - Capítulo do Excel: http://automatetheboringstuff.com/2e/chapter13/





### Exemplo Word

```python!
from docx import Document

d = Document('documento.docx')

busca = '<nome_aluno>'
subst = 'Osvaldo'

for p in d.paragraphs:
    for r in p.runs:
        if busca in r.text:
            r.text = r.text.replace(busca, subst)
            
d.save('novo_doc.docx')
```

Agora com uma tabela de dados

```python!
from docx import Document

d = Document('documento.docx')

def substitui(d, busca, subst):
    for p in d.paragraphs:
        for r in p.runs:
            if busca in r.text:
                r.text = r.text.replace(busca, subst)

dict_subst = {  # dicionário (dict)
    '<nome_aluno>': 'Antônio',
    'CERTIFICADO': 'CERTIFICADO DE CONCLUSÂO',
    'São Paulo': 'Piratininga',
    }

# for chave in dict_subst:
#     valor = dict_subst[chave]
for chave, valor in dict_subst.items():
    substitui(d, chave, valor)
    
d.save('novo_doc.docx')
```

### Explorando Excel


```python!
from docx import Document
import openpyxl

d = Document('documento.docx')  # template
wb = openpyxl.load_workbook('dados.xlsx')  # planilha de dados
fs = wb.worksheets[0]  # first sheet (primeira folha)

def substitui(d, busca, subst):
    for p in d.paragraphs:
        for r in p.runs:
            if busca in r.text:
                r.text = r.text.replace(busca, subst)

filas = list(fs.rows)[1:]  # filas a partir da segunda
dados = {}  # dicionário vazio
for fila in filas:
    a, b = fila[:2]  # duas primeiras células da fila
    if a.value:  # if a.value is not None:
        dados[chave] = valor

for chave, valor in dados.items():
    substitui(d, '{' + f'{chave}' + '}', valor)

output = f"{dados['ASSUNTO']}-{dados['EQUIPAMENTO']}.docx"
d.save(output)
print(f'Salvo em {output}...')

```

