{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# <font color='blue'>Data Science Academy - Python Fundamentos - Capítulo 4</font>\n",
    "\n",
    "## Download: http://github.com/dsacademybr"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## ************ ATENÇÃO ************\n",
    "Caso você tenha problemas com acentos nos arquivos:\n",
    "\n",
    "Primeiro, recomendamos a leitura do material sobre Formato Unicode, ao final do capítulo 4.\n",
    "\n",
    "Uma forma de resolver esse problema, é abrir o arquivo em um editor de texto como o Sublime Text, clicar em File - Save with Encoding e então salvar com encoding UTF-8.\n",
    "\n",
    "Outra opção é incluir o parâmetro encoding='utf8' ao abrir o arquivo para leitura ou escrita.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Manipulação de Arquivos"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- Arquivos TXT\n",
    "- Arquivos CSV \n",
    "- Arquivos JSON"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Manipulando Arquivos TXT"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "texto = \"Cientista de Dados é a profissão que mais tem crescido em todo mundo.\\n\"\n",
    "texto = texto + \"Esses profissionais precisam se especializar em Programação, Estatística e Machine Learning.\\n\"\n",
    "texto += \"E claro, em Big Data.\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cientista de Dados é a profissão que mais tem crescido em todo mundo.\n",
      "Esses profissionais precisam se especializar em Programação, Estatística e Machine Learning.\n",
      "E claro, em Big Data.\n"
     ]
    }
   ],
   "source": [
    "print(texto)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Importando o módulo os\n",
    "import os"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Criando um arquivo \n",
    "arquivo = open(os.path.join('arquivos/cientista.txt'),'w')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Gravando os dados no arquivo\n",
    "for palavra in texto.split():\n",
    "    arquivo.write(palavra+' ')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Fechando o arquivo\n",
    "arquivo.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cientista de Dados é a profissão que mais tem crescido em todo mundo. Esses profissionais precisam se especializar em Programação, Estatística e Machine Learning. E claro, em Big Data. \n"
     ]
    }
   ],
   "source": [
    "# Lendo o arquivo\n",
    "arquivo = open('arquivos/cientista.txt','r')\n",
    "conteudo = arquivo.read()\n",
    "arquivo.close()\n",
    "\n",
    "print(conteudo)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Usando a expressão `with` \n",
    "\n",
    "O método close() é executado automaticamente"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "with open('arquivos/cientista.txt','r') as arquivo:\n",
    "    conteudo = arquivo.read()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "185\n"
     ]
    }
   ],
   "source": [
    "print(len(conteudo))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cientista de Dados é a profissão que mais tem crescido em todo mundo. Esses profissionais precisam se especializar em Programação, Estatística e Machine Learning. E claro, em Big Data. \n"
     ]
    }
   ],
   "source": [
    "print(conteudo)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "with open('arquivos/cientista.txt','w') as arquivo:\n",
    "    arquivo.write(texto[:21])\n",
    "    arquivo.write('\\n')\n",
    "    arquivo.write(texto[:33])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cientista de Dados é \n",
      "Cientista de Dados é a profissão \n"
     ]
    }
   ],
   "source": [
    "# Lendo o arquivo\n",
    "arquivo = open('arquivos/cientista.txt','r')\n",
    "conteudo = arquivo.read()\n",
    "arquivo.close()\n",
    "\n",
    "print (conteudo)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Manipulando Arquivos CSV (comma-separated values )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Importando o módulo csv\n",
    "import csv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "with open('arquivos/numeros.csv','w') as arquivo:\n",
    "    writer = csv.writer(arquivo)\n",
    "    writer.writerow(('primeira','segunda','terceira'))\n",
    "    writer.writerow((55,93,76)) \n",
    "    writer.writerow((62,14,86))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Número de colunas: 3\n",
      "['primeira', 'segunda', 'terceira']\n",
      "Número de colunas: 3\n",
      "['55', '93', '76']\n",
      "Número de colunas: 3\n",
      "['62', '14', '86']\n"
     ]
    }
   ],
   "source": [
    "# Leitura de arquivos csv\n",
    "with open('arquivos/numeros.csv','r') as arquivo:\n",
    "    leitor = csv.reader(arquivo)\n",
    "    for x in leitor:\n",
    "        print ('Número de colunas:', len(x))\n",
    "        print(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Número de colunas: 3\n",
      "['primeira', 'segunda', 'terceira']\n",
      "Número de colunas: 3\n",
      "['55', '93', '76']\n",
      "Número de colunas: 3\n",
      "['62', '14', '86']\n"
     ]
    }
   ],
   "source": [
    "# Código alternativo para eventuais problemas com linhas em branco no arquivo\n",
    "with open('arquivos/numeros.csv','r', encoding='utf8', newline = '\\r\\n') as arquivo:\n",
    "    leitor = csv.reader(arquivo)\n",
    "    for x in leitor:\n",
    "        print ('Número de colunas:', len(x))\n",
    "        print(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[['primeira', 'segunda', 'terceira'], ['55', '93', '76'], ['62', '14', '86']]\n"
     ]
    }
   ],
   "source": [
    "# Gerando uma lista com dados do arquivo csv\n",
    "with open('arquivos/numeros.csv','r') as arquivo:\n",
    "    leitor = csv.reader(arquivo)\n",
    "    dados = list(leitor)\n",
    "    \n",
    "    \n",
    "print (dados)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['55', '93', '76']\n",
      "['62', '14', '86']\n"
     ]
    }
   ],
   "source": [
    "# Impriminfo a partir da segunda linha\n",
    "for linha in dados[1:]:\n",
    "    print (linha)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Manipulando Arquivos JSON (Java Script Object Notation )\n",
    "JSON (JavaScript Object Notation) é uma maneira de armazenar informações de forma organizada e de fácil acesso. Em poucas palavras, ele nos dá uma coleção legível de dados que podem ser acessados de forma muito lógica. Pode ser uma fonte de Big Data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Criando um dicionário\n",
    "dict = {'nome': 'Guido van Rossum',\n",
    "        'linguagem': 'Python',\n",
    "        'similar': ['c','Modula-3','lisp'],\n",
    "        'users': 1000000}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "nome Guido van Rossum\n",
      "linguagem Python\n",
      "similar ['c', 'Modula-3', 'lisp']\n",
      "users 1000000\n"
     ]
    }
   ],
   "source": [
    "for k,v in dict.items():\n",
    "    print (k,v)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Importando o módulo Json\n",
    "import json"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'{\"nome\": \"Guido van Rossum\", \"linguagem\": \"Python\", \"similar\": [\"c\", \"Modula-3\", \"lisp\"], \"users\": 1000000}'"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Convertendo o dicionário para um objeto json\n",
    "json.dumps(dict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Criando um arquivo Json\n",
    "with open('arquivos/dados.json','w') as arquivo:\n",
    "    arquivo.write(json.dumps(dict))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Leitura de arquivos Json\n",
    "with open('arquivos/dados.json','r') as arquivo:\n",
    "    texto = arquivo.read()\n",
    "    data = json.loads(texto)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'nome': 'Guido van Rossum', 'linguagem': 'Python', 'similar': ['c', 'Modula-3', 'lisp'], 'users': 1000000}\n"
     ]
    }
   ],
   "source": [
    "print (data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Guido van Rossum\n"
     ]
    }
   ],
   "source": [
    "print (data['nome'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Imprimindo um arquivo Json copiado da internet\n",
    "from urllib.request import urlopen\n",
    "\n",
    "response = urlopen(\"http://vimeo.com/api/v2/video/57733101.json\").read().decode('utf8')\n",
    "data = json.loads(response)[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Título:  The Good Man trailer\n",
      "URL:  https://vimeo.com/57733101\n",
      "Duração:  143\n",
      "Número de Visualizações:  5514\n"
     ]
    }
   ],
   "source": [
    "print ('Título: ', data['title'])\n",
    "print ('URL: ', data['url'])\n",
    "print ('Duração: ', data['duration'])\n",
    "print ('Número de Visualizações: ', data['stats_number_of_plays'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Copiando o conteúdo de um arquivo para outro\n",
    "import os\n",
    "\n",
    "arquivo_fonte = 'arquivos/dados.json'\n",
    "arquivo_destino = 'arquivos/json_data.txt'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Método 1\n",
    "with open(arquivo_fonte,'r') as infile:\n",
    "    text = infile.read()\n",
    "    with open(arquivo_destino,'w') as outfile:\n",
    "        outfile.write(text)  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "107"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Método 2\n",
    "open(arquivo_destino,'w').write(open(arquivo_fonte,'r').read()) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Leitura de arquivos Json\n",
    "with open('arquivos/json_data.txt','r') as arquivo:\n",
    "    texto = arquivo.read()\n",
    "    data = json.loads(texto)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'nome': 'Guido van Rossum', 'linguagem': 'Python', 'similar': ['c', 'Modula-3', 'lisp'], 'users': 1000000}\n"
     ]
    }
   ],
   "source": [
    "print(data)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# FIM"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Obrigado - Data Science Academy - <a href=\"http://facebook.com/dsacademybr\">facebook.com/dsacademybr</a>"
   ]
  }
 ],
 "metadata": {
  "css": [
   ""
  ],
  "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.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
