<jupyter_start><jupyter_text>Aula 6 - File IO---Uma das coisas mais úteis que temos quando vamos montar nossos scripts é o poder de ler e escrever em arquivos. Assim, podemos persistir informações e/ou ler para processamento. Vamos aprender como fazer isso utilizando Python! Vamos utilizar a função `open()` do Python. Ela espera um nome de arquivo e o modo com que vamos abri-lo. Por enquanto, vamos usar `r` para leitura e `w` para escrita.O algoritmo para criação de um arquivo python é:    criar uma variável que receba o arquivo    escrever alguma(s) string(s)    fechar o arquivo<jupyter_code>file_name = 'meu_arquivo.txt'
file = open(file_name, "w")

file.write('Isso é uma linha\n')
# Escreva mais uma linha em file aqui!
file.close() # Fechando o arquivo<jupyter_output><empty_output><jupyter_text>Outra maneira de fazer isso é utilizando a palavra `with`. Nesse caso, o Python se encarrega de chamar a função `close()` ao final do uso do arquivo. Verifique como fica abaixo:<jupyter_code>with open("meu_arquivo_2.txt", 'w') as f:
    # Nesse caso, f é nossa variável de arquivo
    f.write('Escrevendo no arquivo')
    f.write('Escrevendo no arquivoo')<jupyter_output><empty_output><jupyter_text>Para realizar a leitura, basta alterar para o modo `r` e utilizar um loop `for` para iterar sobre todas as linhas do arquivo.<jupyter_code>with open("meu_arquivo.txt", 'r') as f:
    for line in f:
        print(line)<jupyter_output>Isso é uma linha

Isso é outra linha<jupyter_text>--- Arquivos CSVArquivos CSV (Comma-separated values) são úteis para lermos e salvarmos informações de maneira estruturada, como uma tabela. Eles são bastante utilizados para pré-processamento e criação de bancos para transferências.O Python nos dá uma biblioteca `csv` para trabalhar com esse tipo de arquivo, facilitando a leitura e a escrita. Basta usarmos o comand `import csv`.<jupyter_code>import csv

with open('cadastros.csv', mode='w') as cadastro_file:
    cadastro_writer = csv.writer(cadastro_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
    cadastro_writer.writerow(['Name', 'Class', 'Birthday'])
    cadastro_writer.writerow(['<NAME>', 'Jedi', '22/10/1988'])
    cadastro_writer.writerow(['<NAME>', 'Jedi Master', '21/09/2540'])<jupyter_output><empty_output><jupyter_text>Uma explicação sobre o parâmetro `quotechar`:The quotechar optional parameter tells the writer which character to use to quote fields when writing. Whether quoting is used or not, however, is determined by the quoting optional parameter:- If quoting is set to csv.QUOTE_MINIMAL, then .writerow() will quote fields only if they contain the delimiter or the quotechar. This is the default case.- If quoting is set to csv.QUOTE_ALL, then .writerow() will quote all fields.- If quoting is set to csv.QUOTE_NONNUMERIC, then .writerow() will quote all fields containing text data and convert all numeric fields to the float data type.- If quoting is set to csv.QUOTE_NONE, then .writerow() will escape delimiters instead of quoting them. In this case, you also must provide a value for the escapechar optional parameter.<jupyter_code>with open('cadastros.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    for row in csv_reader:
        print(row)
''' Como podemos imprimir cada valor de cada linha em linhas separadas, pulando a primeira linha?'
    <NAME>
    Jedi
    22/10/1988
    <NAME>
    Jedi Master
    21/09/2540
'''
pass<jupyter_output><empty_output><jupyter_text>--- Exercícios - Parte 1Nos próximos exercícios usaremos o arquivo `hp1_2.txt`.1. Quantas vezes a palavra `harry` aparece? *dica: é possível usar a função `count()` da String*2. Em quantas linhas a palavra `harry` aparece?3. Considerando os personagens `Hagrid`, `Hermione`, `Harry`, `Rony`, `Draco` e `Snape`, conte quantas vezes cada um é citado no livro e escreva isso num csv, no formato:    `Personagem,Citacoes     Hagrid,10     Hermione,12     Harry,23     Rony,30     Draco,50     Snape,10`4. Faça uma função que receba um novo nome para `harry` e troque todas as ocorrências encontradas por um novo nome,r ecebido por parâmetro. Sua função deverá ser usada da seguinte maneira:    `novo_livro = troca_harry('mickey')`    5. Faça a função acima ser genérica, ou seja, receber um nome de um personagem e um novo nome para a troca. A função devolve o livro com os nomes trocados. Exemplo: `novo_livro = reescreve_livro('Hermione', 'Mafalda')`  Exercícios - Parte 2Nos próximos exercícios usaremos o arquivo `movies.csv`.1. Quantos filmes estão neste banco?2. Quantos filmes do gênero comédia existem?3. Quantas animações existem? Quantas dessas são musicais?4. Considere os anos `1990`, `1991`, `1992`, `1993`, `1994` e `1995`. Leia o arquivo csv e escreva um novo contendo o número de filmes por ano, em cada linha. Por ex:    `ano,filmes    1990,10    1991,40    1992,30    1993,50    1994,10    1995,50`<jupyter_code>import csv

new_genres = []
with open('movies.csv', encoding = 'utf-8') as movies:
    movie_reader = csv.DictReader(movies)
    for linha in movie_reader:
        new_genres = (linha['genres'].split('|'))
        del linha['genres']
        linha['genres'] = new_genres
        print(linha['genres'])<jupyter_output>['Adventure', 'Animation', 'Children', 'Comedy', 'Fantasy']
['Adventure', 'Children', 'Fantasy']
['Comedy', 'Romance']
['Comedy', 'Drama', 'Romance']
['Comedy']
['Action', 'Crime', 'Thriller']
['Comedy', 'Romance']
['Adventure', 'Children']
['Action']
['Action', 'Adventure', 'Thriller']
['Comedy', 'Drama', 'Romance']
['Comedy', 'Horror']
['Adventure', 'Animation', 'Children']
['Drama']
['Action', 'Adventure', 'Romance']
['Crime', 'Drama']
['Drama', 'Romance']
['Comedy']
['Comedy']
['Action', 'Comedy', 'Crime', 'Drama', 'Thriller']
['Comedy', 'Crime', 'Thriller']
['Crime', 'Drama', 'Horror', 'Mystery', 'Thriller']
['Action', 'Crime', 'Thriller']
['Drama', 'Sci-Fi']
['Drama', 'Romance']
['Drama']
['Children', 'Drama']
['Drama', 'Romance']
['Adventure', 'Drama', 'Fantasy', 'Mystery', 'Sci-Fi']
['Crime', 'Drama']
['Drama']
['Mystery', 'Sci-Fi', 'Thriller']
['Children', 'Drama']
['Drama', 'Romance']
['Crime', 'Drama']
['Documentary', 'IMAX']
['Children', 'Comedy']
['Comedy', 'Romance']
['Dr[...]
{'fraction_non_alphanumeric': 0.12810646143979476, 'fraction_numerical': 0.01924001924001924, 'mean_word_length': 4.963671128107075, 'pattern_counts': {'":': 0, '<': 27, '<?xml version=': 0, '>': 27, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '490580', 'license': 'MIT', 'n_tokens_mistral': 2328, 'n_tokens_neox': 2216, 'n_words': 739, 'path': 'Aula 6/Aula 6 - File IO.ipynb', 'repo_name': 'thizago/letscode', 'size': '6261'}