{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Módulos *os*, *shutil* e o Objeto *file*"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import os"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'X:\\\\py4eng-course\\\\notebooks\\\\py4eng-pt'"
]
},
"execution_count": 49,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"os.getcwd()"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 50,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"os.path.isdir(r\"C:\\Windows\")"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"workdir = os.path.expanduser(r\"~\\Documents\\pycurso\")"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"if not os.path.isdir(workdir):\n",
" os.mkdir(workdir)"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"texto_filename = workdir + \"\\meu-texto.txt\""
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"endl = \"\\n\"\n",
"with open(texto_filename, \"w\") as texto_file:\n",
" texto_file.write(\"Com Python\" + endl)\n",
" texto_file.write(\"sou mais feliz\" + endl)\n",
" texto_file.write(\"-- fim --\" + endl)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Lendo arquivo texto:"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Com Python\n",
"\n"
]
}
],
"source": [
"with open(texto_filename, \"r\") as texto_file:\n",
" texto_lido = texto_file.readline()\n",
"print(texto_lido)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Com Python\n",
"sou mais feliz\n",
"-- fim --\n",
"\n"
]
}
],
"source": [
"texto_lido = \"\"\n",
"with open(texto_filename, \"r\") as texto_file:\n",
" for line in texto_file:\n",
" texto_lido += line\n",
"print(texto_lido)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Forma insegura de abrir um arquivo**\n",
"\n",
"```python\n",
"texto_file = open(texto_filename)\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Limpando a sujeira:"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "OSError",
"evalue": "[WinError 145] The directory is not empty: 'C:\\\\Users\\\\itghisi\\\\Documents\\\\pycurso'",
"output_type": "error",
"traceback": [
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[1;31mOSError\u001b[0m Traceback (most recent call last)",
"\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mos\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrmdir\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mworkdir\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mOSError\u001b[0m: [WinError 145] The directory is not empty: 'C:\\\\Users\\\\itghisi\\\\Documents\\\\pycurso'"
]
}
],
"source": [
"os.rmdir(workdir)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ops! Diretório não está vazio. Vamos apelar para o módulo *shutil*"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import shutil\n",
"shutil.rmtree(workdir)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"shutil.copy"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Links:\n",
"\n",
"- [Módulo **os**](https://docs.python.org/3.4/library/os.html)\n",
"- [Módulo **shutil**](https://docs.python.org/3.4/library/shutil.html)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Arquivos Excel"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"import openpyxl"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'t (ano)'"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m = []\n",
"t = []\n",
"wb = openpyxl.load_workbook(filename='../resource/well.xlsx')\n",
"sheet = wb.active\n",
"sheet.cell(\"A1\").value"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"for row in sheet.rows[1:]:\n",
" t.append(int(row[0].value))\n",
" m.append(row[1].value)\n",
"t = np.array(t)\n",
"m = np.array(m)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0 1 2 3 4 5]\n",
"[ 100. 77. 61. 49.5 41. 34.5]\n"
]
}
],
"source": [
"print(t)\n",
"print(m)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Links:\n",
"\n",
"- [Módulo **openpyxl**](https://openpyxl.readthedocs.org/en/latest/)\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## Executando Programas Externos\n",
"\n",
"Vamos realizar uma Krigagem com o programa [KB2D](http://www.statios.com/Resources/05-kriging.pdf) da [GSLIB](http://www.gslib.com/). Os binários podem ser obtidos neste [link](http://www.statios.com/software/gslib77.zip).\n",
"\n",
"Para execução de programas externos, utilizaremos o módulo [subprocess](https://docs.python.org/3.4/library/subprocess.html).\n",
"\n",
"```python\n",
"import subprocess\n",
"\n",
"subprocess.call(\"notepad\")\n",
"if ret == 0:\n",
" print(\"Execução sem erros\")\n",
"```\n",
"\n",
"No caso de programas em Fortran que utilizam redirecionamento para entrada de dados (como é o caso do **kb2d.exe**), precisamos definir o parâmetro `shell=True` para que a chamada seja feita utilizando o *shell* do sistema:\n",
"\n",
"```python\n",
"workdir = ... #diretório onde estão os dados e o executável kb2d.exe\n",
"\n",
"subprocess.call(\"kb2d.exe < kb2d.par\", shell=True, cwd=workdir)\n",
"```\n",
"\n",
"Os arquivos de entrada que serão utilizados na krigagem podem ser obtidos no [repositório do curso no GitHub](https://github.com/ESSS/py4eng-course/tree/webinar-2015/cases/kriging).\n",
"\n",
"### Exercício 1 - Experimento com Krigagem\n",
"\n",
"**Parte 1**: Realize a execução do programa **kb2d.exe** com os exemplos disponibilizados e crie uma função que leia o arquivo do resultado da krigagem para um Array.\n",
"\n",
"Dicas:\n",
"\n",
"- Utilize a função `split()` para dividir uma linha do arquivo pelos espaços em branco\n",
"- Utilize a função `readline()` do objecto *file* para pular o cabeçalho\n",
"- O tamanho da malha de krigagem é 25x25. Inicialize seu Array com o tamanho correto\n",
"- Use o código abaixo para plotar os resultados\n",
"\n",
"```python\n",
"result = ... # Resultado lido do arquivo\n",
"\n",
"xi = np.linspace(0, 25 * 2.0, 25)\n",
"yi = np.linspace(0, 25 * 2.0, 25)\n",
"plt.contourf(xi, yi, results.reshape(25,25)) \n",
"plt.colorbar()\n",
"```\n",
"\n",
"![Resultado da Krigagem](../resource/kriging.png)\n",
"\n",
"**Parte 2**: Crie um arquivo template e use para disparar krigagens variando os alcances máximos e mínimos (a_max, a_min)."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}