Dificuldades com sistema de edição de arquivos em python

#1

Olá.
Estou num projeto e em uma parte do mesmo me vi com dificuldades para fazer uma coisa e queria ajuda. A linguagem que estou a utilizar é python, oque preciso fazer é abrir determinado arquivo .txt em modo de escrita, e nesse editar apenas algumas linhas por exemplo deixar todas intactas e uma delas estar com alguma numeração e editar apenas o mesmo sem afetar o arquivo não adicionando nenhuma linha a mais.
Esperam que possam me ajudar e que tenham intendido o problema.

0 Likes

#2

Olá @deyvidd

Eu tentaria com o replace() se o padrão de texto que você quer localizar for único. Basicamente um padrão numérico que se repete varias vezes e não se altera.

Vamos simular um cenário onde temos um arquivo de texto chamado NomeDoArquivo.txt, neste arquivo temos o seguinte conteúdo:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, 2019 sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi 2019 ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
2019 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est 2019 laborum.

No arquivo a cima temos o numero 2019 se repetindo em vários locais, neste caso eu tentaria o seguinte código:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Substituindo texto em um arquivo com replace."""

# Abrindo arquivo em modo leitura.
with open(file='NomeDoArquivo.txt', mode='r') as f:
    # Lendo o conteúdo do arquivo.
    conteudo = f.read()
# Fechando o arquivo que foi aberto.
f.close()

# Realizado a alteração
resultado = conteudo.replace('2019', 'NUMERO ALTERADO')

# Salvando em outro arquivo (só para não sobreescrever o original).
with open('alterado-com-replace.txt', 'w') as f:
    f.write(resultado)
f.close()

Já no caso deste valor numérico não ter um padrão definido eu tentaria com expressões regulares (regex).

Para este cenário vamos considerar um arquivo chamado NomeDoArquivo1.txt, com o conteúdo:

Lorem ipsum dolor sit amet, consectetur adipiscing elit, 2019 sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi 1111111111111111 ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
1715 Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est 2000 laborum.

No caso do arquivo a cima o valor numérico varia, neste caso o seguinte código pode ser efetivo:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Substituindo texto em um arquivo com regex."""
import re

with open('NomeDoArquivo1.txt', 'r') as file:
    conteudo = file.read()

resultado = re.sub(r'\b\d+\b', 'NUEMRO ALTERADO', conteudo)

with open('alterado-com-regex.txt', 'w') as f:
    f.write(resultado)
f.close()

Caso seu problema seja mais especifico manda um exemplo que a gente tenta trabalhar em cima dele.

0 Likes

#3

Se você souber exatamente o número da linha, uma opção é usar o método readlines() ao invés do read(). A diferença é que ao invés de você ter uma string com todo o conteúdo, você terá uma lista em que cada elemento é uma linha do arquivo. Aí você pode aplicar as mesmas técnicas acima para editar apenas os números da linha ao invés do arquivo inteiro.

1 Like

#4

Ok vou testar os metodos aqui

1 Like