{ "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 }