<jupyter_start><jupyter_text>Leitura e Escrita em Arquivos No Python, se quisermos abrir um arquivo de texto puro para leitura, temos várias construções possíveis. Porém, a mais utilizada e que é, em geral, mais simples, é a seguinte:<jupyter_code>import os
diretorio = os.path.join(os.getcwd(), "..","exemplos/exemplo_2")
with open(os.path.join(diretorio,"file1.txt"), "r") as arquivo:
    numlinhas = 0
    for line in arquivo:
        numlinhas += 1
        
print(numlinhas)<jupyter_output>131<jupyter_text>**Atenção:** Os exemplos foram formulados no Linux; se você estiver usando Windows ou MacOS, talvez seja necessário alterar os separadores de diretórios/arquivos para uma contrabarra, por exemplo. O bloco **with open(...)**, quando executado, abre o arquivo com a opção escohida (no caso acima, 'r', pois queremos apenas ler o arquivo), e automaticamente fecha o arquivo quando é concluido.  Observe que as linhas do arquivo podem ser acessadas diretamente, uma a uma, através de um bloco for:<jupyter_code>with open(os.path.join(diretorio,"file1.txt"), "r") as meuarquivo:
    for linha in meuarquivo:
        print(linha)<jupyter_output>dom set 11 18:10:54 BRT 2016 

LaDo9ltXdFz7dQBvg52Kqy2jTybecYal2hg3+RdUEzq67KWnaU59RGrRfndSOSq7YMbjQd3tgUVp

sAeUFfN0Peu3goZbdV5ycNsv2zNpfAT0i8RSiDd/IMSGuvhTdLzkij1JCDDufn+qiUikZTXkOz8s

rb6bysNf65RZEVfAEWXqiwbziSri3cTu6k62IhXRdiglX2KmFQeckYjfiHZztm6ijO2kgsytdWuY

<KEY>

Q<KEY>[...]<jupyter_text>ExemploTentar encontrar uma string específica (no nosso caso, "sf") dentro do arquivo file1.txt<jupyter_code>string = "sf"
b = []
with open(os.path.join(diretorio,"file1.txt"),"r") as arquivo:
    for line in arquivo:
        if string in line:
            b.append(line.rstrip("\n"))<jupyter_output><empty_output><jupyter_text>Neste momento, a lista b contém todas as linhas do arquivo que continham a string desejada:<jupyter_code>print(b)<jupyter_output>['<KEY>', '<KEY>']<jupyter_text>Para alguns casos específicos, pode ser interessante carregar um arquivo completo na memória. Para isso, usamos<jupyter_code>with open(os.path.join(diretorio,"file1.txt"),"r") as arquivo:
    conteudo = arquivo.read()
    
print(conteudo)<jupyter_output>dom set 11 18:10:54 BRT 2016 
LaDo9ltXdFz7dQBvg52Kqy2jTybecYal2hg3+RdUEzq67KWnaU59RGrRfndSOSq7YMbjQd3tgUVp
sAeUFfN0Peu3goZbdV5ycNsv2zNpfAT0i8RSiDd/IMSGuvhTdLzkij1JCDDufn+qiUikZTXkOz8s
rb6bysNf65RZEVfAEWXqiwbziSri3cTu6k62IhXRdiglX2KmFQeckYjfiHZztm6ijO2kgsytdWuY
xI/g5W/DOh0AujX453TU4KFw5wjxj0EoAlM8FGMbzU1JUxONuUZd1b1wbEaQlEN69m9GV7qLTiRR
4f0J/xobEQip7QsavNDjAuVhDZNpWpE4HFJu93W6FzQrp/274RgUghF5fmKW7APvG23+AaeN21To
7aDitX3gQM8O/AE00tZh7C9+N8j/CKq7esoFsOMQN9SUvx+PxL87HbeF2xhqkrnabiQABT2r9fR8
TW0EbnM6iZTnLsG6X0fF4/Zk3dRa9cw/fhXCvWbskamgSj4jAw5gGYLFk+5ZJsSr1ElTTU74vqef
tThh4LLCTGQXFSdDNpqwaUuJY0/BAYk7Zlo04f4CImeO8FOmRE9EVEVJ4hvxuWMVXrdQYXC2LDat
19dLLghqwJFBckWBY9rueUIhrylvbCms6IHcWVXIjkzTIJnKimmp0G+w1NW3gXVMZMR2J9Qr3oKG
o6cP4e8YgqMqCbL3PlA2hpgyE3BixC0cIOd7yL4dbPKibg2LwEPSJDMtsrHKfG5OrAY5ZuAg67ou
iy1yS5SQ4vYhmi6iKjsyMqCqlVYiA40DsySCWKNRHU2BEwN64yrFTbBeBA1a09rdqKATZFXkLCnA
30YtUf6GZtua13EYWDn0/nDuZyIwZYYlWsiHbX5TK5in7NmXC12ls4F52c3PkmTHsgfs2aQdEene
QZECPc+7t7HtYCk/qyGd8PbYmIZ7Sdqvrcnu+A7wbjxFW9[...]<jupyter_text>Também podemos usar o comando readline:<jupyter_code>with open(os.path.join(diretorio,"file1.txt"), "r") as arquivo:
    print(arquivo.readline())<jupyter_output>dom set 11 18:10:54 BRT 2016<jupyter_text>Sem argumentos, ele lê a *próxima* linha do arquivo; isto quer dizer que se ele é executado diversas vezes em sequência, com o arquivo aberto, ele lê a cada vez que é executado uma das linhas do arquivo.<jupyter_code>with open(os.path.join(diretorio,"file1.txt"), "r") as arquivo:
    for i in range(0,5):
        print(arquivo.readline())<jupyter_output>dom set 11 18:10:54 BRT 2016 

LaDo9ltXdFz7dQBvg52Kqy2jTybecYal2hg3+RdUEzq67KWnaU59RGrRfndSOSq7YMbjQd3tgUVp

sAeUFfN0Peu3goZbdV5ycNsv2zNpfAT0i8RSiDd/IMSGuvhTdLzkij1JCDDufn+qiUikZTXkOz8s

rb6bysNf65RZEVfAEWXqiwbziSri3cTu6k62IhXRdiglX2KmFQeckYjfiHZztm6ijO2kgsytdWuY

xI/g5W/DOh0AujX453TU4KFw5wjxj0EoAlM8FGMbzU1JUxONuUZd1b1wbEaQlEN69m9GV7qLTiRR<jupyter_text>ExemploLer a 10a linha do arquivo, de três maneiras diferentes:<jupyter_code>with open(os.path.join(diretorio,"file1.txt"), "r") as arquivo:
    for i in range(0,10):
        linha = arquivo.readline()
        if i == 9:
            print(linha)
with open(os.path.join(diretorio,"file1.txt"), "r") as arquivo:
    i = 0
    for linha in arquivo:
        if i == 9:
            print(linha)
        i = i + 1
with open(os.path.join(diretorio,"file1.txt"), "r") as arquivo:
    conteudo = list(arquivo.read().split("\n"))
    
print(conteudo[9])<jupyter_output>19dLLghqwJFBckWBY9rueUIhrylvbCms6IHcWVXIjkzTIJnKimmp0G+w1NW3gXVMZMR2J9Qr3oKG<jupyter_text>Exemplo:Ler a primeira linha de cada arquivo de um diretorio e escrever o resultado em outro arquivo. Primeiro, usamos uma list comprehension para obtermos uma lista dos arquivos no diretorio em que estamos interessados, mas queremos excluir o arquivo teste.txt e queremos que os arquivos estejam listados com seu caminho completo.<jupyter_code>print([os.path.join(diretorio,item) for item in os.listdir(diretorio) if item != "teste.txt"])
lista = [os.path.join(diretorio,item) for item in os.listdir(diretorio) if item != "teste.txt"]
lista<jupyter_output><empty_output><jupyter_text>Agora, vamos ler apenas a primeira linha de cada arquivo:<jupyter_code>for item in lista:
    with open(item,"r") as arquivo:
        print(arquivo.readline())
with open("resumo.txt", "w") as arquivo_saida:
    for item in lista:
        with open(item,"r") as arquivo:
            arquivo_saida.write(arquivo.readline()+"\n")<jupyter_output><empty_output><jupyter_text>Agora, vamos desfazer o exemplo:<jupyter_code>os.remove("resumo.txt")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.08856848609680741, 'fraction_numerical': 0.055612770339855816, 'mean_word_length': 6.5479274611398965, 'pattern_counts': {'":': 0, '<': 42, '<?xml version=': 0, '>': 42, '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': '11', 'dir': 'jupyter-structured-clean-dedup', 'id': '640191', 'license': 'MIT', 'n_tokens_mistral': 2926, 'n_tokens_neox': 2804, 'n_words': 450, 'path': 'content/pt_br/Notebook Extra - Leitura e Escrita em Arquivos.ipynb', 'repo_name': 'mauriciolanda4/callicore', 'size': '6690'}