Substituir uma linha em um arquivo em Python

Vaibhhav Khetarpal 30 janeiro 2023
  1. Use o loop for junto com a função replace() para substituir uma linha em um arquivo em Python
  2. Crie um novo arquivo com o conteúdo atualizado e substitua o arquivo original em Python
  3. Use a função fileinput.input() para substituir o texto em uma linha em Python
  4. Use o módulo re para substituir o texto em uma linha em Python
Substituir uma linha em um arquivo em Python

O manuseio de arquivos é considerado um aspecto essencial de qualquer aplicativo da web. Semelhante à maioria das linguagens de programação, Python é perfeitamente capaz de suportar o manuseio de arquivos. Ele permite que você lide com arquivos de diferentes tipos, essencialmente para realizar algumas operações básicas como ler e escrever. Ele também fornece algumas outras opções de manuseio de arquivos para operar os arquivos.

Este tutorial demonstra os diferentes métodos disponíveis para substituir uma linha em um arquivo em Python.

Para demonstrar as diferentes maneiras de substituir uma linha em um arquivo neste artigo, usaremos um arquivo de texto, motivation.txt.

Arquivo de texto (motivation.txt):

There are always second chances in life. Anybody can bounce back from hardships. The hardships that we face are just a test to check our will. A strong will is all it takes to bounce back from a loss.

O caminho do diretório de armazenamento deste arquivo pode ser diferente no computador do leitor; portanto, é aconselhável ajustar de acordo.

Use o loop for junto com a função replace() para substituir uma linha em um arquivo em Python

A função open() é utilizada para abrir um arquivo em Python. O arquivo pode ser aberto em formato de texto ou binário, o que depende do programador. A função open() possui vários modos, e todos eles fornecem diferentes opções de acessibilidade para abrir um arquivo.

O loop for simples é uma maneira convencional de percorrer cada linha no arquivo de texto fornecido e encontrar a linha que queremos substituir. Em seguida, a linha desejada pode ser substituída usando a função replace(). Tudo isso é feito no modo ler. Finalmente, o arquivo é aberto no modo gravação e o conteúdo substituído é gravado no arquivo fornecido.

O código a seguir usa o loop for junto com a função replace().

# opening the file in read mode
file = open("motivation.txt", "r")
replacement = ""
# using the for loop
for line in file:
    line = line.strip()
    changes = line.replace("hardships", "situations")
    replacement = replacement + changes + "\n"

file.close()
# opening the file in write mode
fout = open("motivation.txt", "w")
fout.write(replacement)
fout.close()

Crie um novo arquivo com o conteúdo atualizado e substitua o arquivo original em Python

Várias funções estão trabalhando para implementar esse processo. O conhecimento do processo de todas essas funções é necessário para executar este método com sucesso. Precisamos importar várias funções de três módulos para o código Python.

  • Em primeiro lugar, precisamos importar a função mkstemp() do módulo tempfile. Esta função é utilizada para retornar uma tupla como uma saída junto com um caminho e um descritor de arquivo.
  • Em seguida, precisamos importar duas funções do módulo shutil. A primeira função é a função copymode(), que é utilizada para copiar os bits de permissão de uma fonte para o caminho de destino. A segunda função é a função move(), que permite a movimentação de arquivos de um lugar para outro.
  • Finalmente, precisamos importar a função remove() do módulo OS. Esta função permite a exclusão de um caminho.

Todos esses módulos precisam ser importados para o código Python atual para executar o código sem erros. Um exemplo de código que implementa dessa maneira é o seguinte.

from tempfile import mkstemp
from shutil import move, copymode
from os import fdopen, remove

# storing the path where the file is saved on your device as a variable
path = "C:\\Users\Admin\Desktop\python\test\motivation.txt"


def replacement(filepath, hardships, situations):

    # Creating a temp file
    fd, abspath = mkstemp()
    with fdopen(fd, "w") as file1:
        with open(filepath, "r") as file0:
            for line in file0:
                file1.write(line.replace(hardships, situations))
    copymode(filepath, abspath)
    remove(filepath)
    move(abspath, filepath)


replacement(path, "hardships", "situations")

Use a função fileinput.input() para substituir o texto em uma linha em Python

O método fileinput.input() obtém o arquivo como entrada linha por linha e é utilizado principalmente para anexar e atualizar os dados no arquivo fornecido.

Os módulos fileinput e sys precisam ser importados para o código Python atual para executar o código sem erros. O código a seguir usa a função fileinput.input() para substituir o texto em uma linha em Python.

import fileinput
import sys


def replacement(file, previousw, nextw):
    for line in fileinput.input(file, inplace=1):
        line = line.replace(previousw, nextw)
        sys.stdout.write(line)


var1 = "hardships"
var2 = "situations"
file = "motivation.txt"
replacement(file, var1, var2)

Use o módulo re para substituir o texto em uma linha em Python

O módulo re é um módulo embutido que o Python fornece aos programadores que lidam com expressões regulares e precisa ser importado para o código. Ele ajuda a realizar a tarefa de pesquisar um padrão em uma determinada string.

Neste método, utilizamos duas funções, nomeadamente, re.compile() e re.escape(), do módulo RegEx. A função re.compile() é utilizada para gerar um objeto de expressão regular a partir do padrão de expressão regular, que é então usado para correspondência. A função re.compile() é utilizada para ignorar ou escapar dos caracteres especiais em Python.

O código a seguir usa várias funções do módulo Regex para substituir o texto em uma linha em Python.

import re


def replacement(Path, text, subs, flags=0):
    with open(filepath, "r+") as f1:
        contents = f1.read()
        pattern = re.compile(re.escape(text), flags)
        contents = pattern.sub(subs, contents)
        f1.seek(0)
        f1.truncate()
        f1.write(file_contents)


filepath = "motivation.txt"
text = "hardships"
subs = "situations"
replacement(filepath, text, subs)

Aqui, também usamos uma função sub() para substituir o padrão fornecido por uma string ou um resultado de uma função especificada.

Vaibhhav Khetarpal avatar Vaibhhav Khetarpal avatar

Vaibhhav is an IT professional who has a strong-hold in Python programming and various projects under his belt. He has an eagerness to discover new things and is a quick learner.

LinkedIn

Artigo relacionado - Python File