<jupyter_start><jupyter_text>Para trabalhar eficientemente com dados, é muitas vezes necessário sua padronização, o que permite que haja um processamento e armazenamento satisfatórios. O que se deve pois os dados têm a péssima mania de possuirem todas as formas, todos os tamanhos e todas as codificações possíveis, hehehe.<jupyter_code>"""Usando a ideia empregada no livro Use a Cabeça Python, temos aqui 4 arquivos de tempo: 
cada arquivo é de um atleta diferente, tendo registrado os tempos na corrida de 600metros.
Mas, há um problema: uma falta de padronização na maneira como foi registrado esses 
tempos."""
"""victor.txt: 2-34,3:21,2.34,2.45,3.01,2:01,2:01,3:10,2-22
suelen.txt: 2:58,2.58,2:39,2-25,2-55,2:54,2.18,2:55,2:55
claudia.txt: 2:22,3.01,3:01,3.02,3:02,3.02,3:22,2.49,2:38
marcio.txt: 2.59,2.11,2:11,2:23,3-10,2-23,3:10,3.21,3-21
"""
"""um truque: se usarmos with, não precisamos nos preocupar em fechar o arquivo: o python
faz isso automaticamente^^"""

with open('dados/victor.txt') as victor:#abrir
    dados = victor.readline()#ler
victor_padronizado = dados.strip().split(',')#padronizar
print(victor_padronizado)
"""Ele executa o código dentro do bloco, a identação, tudo que está fora desta identação,
retorna erro por conta do arquivo estar fechado."""
with open('dados/victor.txt') as victor:
    print(victor.read())
print(victor.read())
"""Criar um exemplo pra mostrar com textos de muitas linhas!"""
"""Se devemos fazer isto para todos os arquivos, não é melhor reduzirmos o código? Isto é,
evitarmos a repetição??-> CLARO"""
#mas faremos por parte:
def exibe():
    with open('dados/victor.txt') as victor:#abrir
        dados = victor.readline()#ler
    victor_padronizado = dados.strip().split(',')#transforma em lista
    print(victor_padronizado)
exibe()
def exibe():
    nome = input('Informe o caminho do arquivo: ')
    with open(nome) as victor:#abrir
        dados = victor.readline()#ler
    victor_padronizado = dados.strip().split(',')#transforma em lista
    print(victor_padronizado)
padroniza()
def exibe():
    nome = input('Informe o caminho do arquivo: ')
    with open(nome) as nome:#abrir
        dados = nome.readline()#ler
    nome_padronizado = dados.strip().split(',')#padronizar
    print(nome_padronizado)

padroniza()
"""Até aqui, conseguimos transformar o arquivo.txt numa lista e printamos. Mas não 
padronizamos coisa alguma, com relação aos minutos. Faremos isto agora:"""

def padroniza():
    nome = input('Informe o caminho do arquivo: ')
    with open(nome) as nome:
        dados = nome.readline()
    nome_padronizado = dados.strip().split(',')#já temos uma lista
    for cada_valor in nome_padronizado:#então olhamos pela posição
        print(cada_valor[1])#todos deveriam ser ':'
    

padroniza()
#mas temos '.' e '-'
def padroniza():
    nome = input('Informe o caminho do arquivo: ')
    with open(nome) as nome:
        dados = nome.readline()
    nome_padronizado = dados.strip().split(',')#já temos uma lista
    for cada_valor in nome_padronizado:#então olhamos pela posição
        if cada_valor[1] == '-':#criamos a condição
            print(cada_valor.replace('-', ':'))#e substituímos os caractéres
        elif cada_valor[1] == '.':
            print(cada_valor.replace('.', ':'))
        else:
            print(cada_valor)       
padroniza()
"""Então agora podemos chamar todos os 4 arquivos de tempo"""
padroniza()
padroniza()
padroniza()
padroniza()
"""Mas veja, que não editamos o arquivo, apenas o processamos para exibí-lo como 
gostaríamos, quando o abrimos sem processar, vemos o arquivo ogirinal:"""
#victor.txt
exibe()
"""Esta função deveria salvar no arquivo original."""
def padroniza3():
    nome = input('Informe o caminho do arquivo: ')
    with open(nome, 'w') as nome:
        dados = nome.readline()
    nome_padronizado = dados.strip().split(',')
    for cada_valor in nome_padronizado:
        if cada_valor[1] == '-':
            print(cada_valor.replace('-', ':'))
            nome.writelines(cada_valor.replace('-', ':'))
        elif cada_valor[1] == '.':
            print(cada_valor.replace('.', ':'))
            nome.writelines(cada_valor.replace('.', ':'))
        else:
            print(cada_valor)
            nome.writelines(cada_valor)
padroniza3()
#gerar uma função, que recebe o nome do arquivo.txt, padroniza este arquivo e gera outro 
#arquivo padronizado, de nome: nome_padronizado
"""Vamos usar os intervalos, para pegar os valores pela sua posição"""
def padroniza():
    lista = []#criamos uma lista
    nome = input('Informe o caminho do arquivo: ')
    with open(nome) as nome:
        dados = nome.readline()
    nome_padronizado = dados.strip().split(',')
    for cada_valor in nome_padronizado:
        if cada_valor[1] == '-':
            print(cada_valor.replace('-', ':'))
            lista.append(cada_valor.replace('-', ':'))#jogamos o valor pra dentro
        elif cada_valor[1] == '.':
            print(cada_valor.replace('.', ':'))
            lista.append(cada_valor.replace('.', ':'))#o append deve ser feito
        else:
            print(cada_valor)
            lista.append(cada_valor)#para todas as condições
    print(lista)
padroniza()
"""Então agora podemos usar a posição do iterador para pegar os itens pela sua posição.
Lembrando que a primeira posição é 0"""
def padroniza():
    lista = []#criamos uma lista
    nome = input('Informe o caminho do arquivo: ')
    with open(nome) as nome:
        dados = nome.readline()
    nome_padronizado = dados.strip().split(',')
    for cada_valor in nome_padronizado:
        if cada_valor[1] == '-':
            print(cada_valor.replace('-', ':'))
            lista.append(cada_valor.replace('-', ':'))
        elif cada_valor[1] == '.':
            print(cada_valor.replace('.', ':'))
            lista.append(cada_valor.replace('.', ':'))
        else:
            print(cada_valor)
            lista.append(cada_valor)
    print(lista)
    a = int(input('Informe o índice do elemento que deseja visualizar:'))
    a = a - 1
    print(lista[a])
padroniza()
"""Assim como também podemos definir um intervalo:"""
def padroniza():
    lista = []#criamos uma lista
    nome = input('Informe o caminho do arquivo: ')
    with open(nome) as nome:
        dados = nome.readline()
    nome_padronizado = dados.strip().split(',')
    for cada_valor in nome_padronizado:
        if cada_valor[1] == '-':
            print(cada_valor.replace('-', ':'))
            lista.append(cada_valor.replace('-', ':'))
        elif cada_valor[1] == '.':
            print(cada_valor.replace('.', ':'))
            lista.append(cada_valor.replace('.', ':'))
        else:
            print(cada_valor)
            lista.append(cada_valor)
    print(lista)
    a = int(input('Informe o intervalo inferior:'))
    a = a - 1
    b = int(input('Informe o intervalo superior:'))
    b = b - 1
    print(lista[a:b])
padroniza()
"""Corrigindo!!"""
def padroniza():
    lista = []#criamos uma lista
    nome = input('Informe o caminho do arquivo: ')
    with open(nome) as nome:
        dados = nome.readline()
    nome_padronizado = dados.strip().split(',')
    for cada_valor in nome_padronizado:
        if cada_valor[1] == '-':
            print(cada_valor.replace('-', ':'))
            lista.append(cada_valor.replace('-', ':'))
        elif cada_valor[1] == '.':
            print(cada_valor.replace('.', ':'))
            lista.append(cada_valor.replace('.', ':'))
        else:
            print(cada_valor)
            lista.append(cada_valor)
    print(lista)
    a = int(input('Informe o intervalo inferior:'))
    a = a - 1
    b = int(input('Informe o intervalo superior:'))
    #b = b - 1, pois inicia no 0, e vai até b.
    print(lista[a:b])
padroniza()
"""Ou então nós podemos definir 'a' e 'b' como argumentos da nossa função:"""
def padroniza(a, b):
    lista = []#criamos uma lista
    nome = input('Informe o caminho do arquivo: ')
    with open(nome) as nome:
        dados = nome.readline()
    nome_padronizado = dados.strip().split(',')
    for cada_valor in nome_padronizado:
        if cada_valor[1] == '-':
            print(cada_valor.replace('-', ':'))
            lista.append(cada_valor.replace('-', ':'))
        elif cada_valor[1] == '.':
            print(cada_valor.replace('.', ':'))
            lista.append(cada_valor.replace('.', ':'))
        else:
            print(cada_valor)
            lista.append(cada_valor)
    print(lista)
    #a = int(input('Informe o intervalo inferior:'))
    a = a - 1
    #b = int(input('Informe o intervalo superior:'))
    #b = b - 1, pois inicia no 0, e vai até b.
    print(lista[a:b])
padroniza(1, 3)
"""Mas, quais são as vantagens? 
Além de uma melhor estruturação na nossa função, podemos agora, como um exemplo simples,
obter um valor default:"""
def padroniza(a=1, b=9):
    lista = []
    nome = input('Informe o caminho do arquivo: ')
    with open(nome) as nome:
        dados = nome.readline()
    nome_padronizado = dados.strip().split(',')
    for cada_valor in nome_padronizado:
        if cada_valor[1] == '-':
            print(cada_valor.replace('-', ':'))
            lista.append(cada_valor.replace('-', ':'))
        elif cada_valor[1] == '.':
            print(cada_valor.replace('.', ':'))
            lista.append(cada_valor.replace('.', ':'))
        else:
            print(cada_valor)
            lista.append(cada_valor)
    print(lista)
    a = a - 1
    print(lista[a:b])
padroniza()
"""No caso, o meu valor padrão imprimirá a lista inteira."""
def padroniza(a=1, b=9):
    lista = []
    nome = input('Informe o caminho do arquivo: ')
    with open(nome) as nome:
        dados = nome.readline()
    nome_padronizado = dados.strip().split(',')
    for cada_valor in nome_padronizado:
        if cada_valor[1] == '-':
            print(cada_valor.replace('-', ':'))
            lista.append(cada_valor.replace('-', ':'))
        elif cada_valor[1] == '.':
            print(cada_valor.replace('.', ':'))
            lista.append(cada_valor.replace('.', ':'))
        else:
            print(cada_valor)
            lista.append(cada_valor)
    a = a - 1
    return(lista[a:b])#só pode haver um return verdadeiro por função
padroniza(2,3)

"""E se eu fizer o intervalo ao contrário?"""
padroniza(3,2)
"""Vamos melhorar a função padroniza: ela deve retornar agora apenas os valores 
compreendidos intervalo dado:"""
def padroniza2(a=1, b=9):
    lista = []
    nome = input('Informe o caminho do arquivo: ')
    with open(nome) as nome:
        dados = nome.readline()
    nome_padronizado = dados.strip().split(',')
    for cada_valor in nome_padronizado:
        if cada_valor[1] == '-':
            #print(cada_valor.replace('-', ':'))
            lista.append(cada_valor.replace('-', ':'))
        elif cada_valor[1] == '.':
            #print(cada_valor.replace('.', ':'))
            lista.append(cada_valor.replace('.', ':'))
        else:
            #print(cada_valor)
            lista.append(cada_valor)
    a = a - 1
    return(lista[a:b])

padroniza2(1, 5)
"""Criar uma função que lê o arquivo e exporta um outro com um número específico de 
menores tempos."""
"""Que tal experimentar Exceções(Try - Except) ou Condições(if - elif - else), 
pensando nos erros que podem ocorrer?"""

"""Vamos agora salvar este arquivo em outro lugar: abre -> processa -> salva externamente"""
def padroniza3(a=1, b=9):
    lista = []
    nome = input('Informe o caminho do arquivo a ser lido: ')
    nome2 = input('Informe o nome do arquivo a ser criado: ')
    with open(nome) as nome:
        dados = nome.readline()
    nome_padronizado = dados.strip().split(',')
    for cada_valor in nome_padronizado:
        if cada_valor[1] == '-':
            #print(cada_valor.replace('-', ':'))
            lista.append(cada_valor.replace('-', ':'))
        elif cada_valor[1] == '.':
            #print(cada_valor.replace('.', ':'))
            lista.append(cada_valor.replace('.', ':'))
        else:
            #print(cada_valor)
            lista.append(cada_valor)
    a = a - 1
    arquivo_novo = open('dados/' + str(nome2), 'a')
    arquivo_novo.write(str(lista))
    arquivo_novo.close()
    return(lista[a:b])
    


padroniza3(1, 5)
"""o 'a' permite que mudanças sejam feitas no arquivo, se ele não existir, será criado"""
"""Agora já sabemos como realizar as etapas: Abrir -> Ler -> Padronizar -> Salvar"""
"""E para o caso de fazermos modificações no arquivo, mas salvando-as no mesmo arquivo:"""
def padroniza4(a=1, b=9):
    lista = []
    nome = input('Informe o caminho do arquivo a ser modificado: ')
    nome2 = open(nome, 'r+')
    dados = nome2.readline()
    nome_padronizado = dados.strip().split(',')
    for cada_valor in nome_padronizado:
        if cada_valor[1] == '-':
            lista.append(cada_valor.replace('-', ':'))
        elif cada_valor[1] == '.':
            lista.append(cada_valor.replace('.', ':'))
        else:
            lista.append(cada_valor)
    nome2.write(str(lista))
    return(lista[a:b])
    """a = a - 1
    arquivo_novo = open('dados/' + str(nome2), 'a')
    arquivo_novo.write(str(lista))"""
    
    


padroniza4(1, 5)
"""No caso, este intervalo será acrescentando ao fim da linha existente no arquivo."""<jupyter_output>Informe o caminho do arquivo a ser modificado: dados/suelen.txt
{'fraction_non_alphanumeric': 0.14896655392709507, 'fraction_numerical': 0.014205186020293123, 'mean_word_length': 2.9425185185185185, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 10, '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': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '135272', 'license': 'MIT', 'n_tokens_mistral': 4901, 'n_tokens_neox': 4933, 'n_words': 1158, 'path': '5-Trabalhe com os Dados/Cap5-Trabalhe com os Dados.ipynb', 'repo_name': 'vss-py/Python-N-vel-Zero', 'size': '13305'}