Modificando o valor de uma tabela em .TXT e reescrevendo-a!

Estou compartilhando aqui um jeito (que demorei dois dias para programar) de modificar um valor de uma tabela simples de um arquivo .TXT, se puderem me ajudar a melhorar meu código agradeço.
De acordo com os meus conhecimentos, eu acho que o meu programa faz isso:

> Guarda as linhas do arquivo .txt em uma lista
> Verifica se alguma das linha contém um nome de referência para o valor que deseja ser modificado
> Modifica essa linha
> Joga ela de volta a tabela
> Salva a tabela no arquivo .txt

    #Programed by @John

            arq = open('C:\\Users\\John\\Desktop\\arquivo.txt', 'r')

            novo_valor = input("Digite o novo valor:")

            def troca_Arroz():
                tabela = arq.readlines()

                x = 1
                for linha in tabela[x:]:
                    print(linha)

                    if (linha.__contains__("Arroz")):
                        valor = linha.split("|")
                        valor[1] = (" R$%s " %novo_valor)
                        valor = valor[0] + "|" + valor[1] + "|" + valor[2]
                        print(valor)

                        arq2 = open('C:\\Users\\John\\Desktop\\arquivo.txt', 'w')
                        tabela[x] = valor
                        print(tabela)
                        
                        arq2.writelines(tabela)
                        arq2.close()
                        break

                    x += 1

            troca_Arroz()
            arq.close()

Acho que você pode começar passando os arquivos junto com o valor que quer trocar como parâmetros para a função…

def troca_arroz(arq_origem, arq_destino, novo_valor):
    ...

Isso evita você usar variáveis globais e ainda deixa sua função pronta para trabalhar com qualquer origem e qualquer destino…

Outro ponto que futuramente pode dar problema, dentro da função esses trechos…

arq2 = open('C:\\Users\\John\\Desktop\\arquivo.txt', 'w')
...
arq2.close()

Evite-os ao máximo, principalmente em loops (for, while) como você está fazendo, além de “amarrar” sua função a um único arquivo, ainda afeta performance se o arquivo ficar muito grande…

Melhor ainda! Olhando um pouco a documentação com um único objeto file você consegue abrir o arquivo tanto para leitura quanto escrita usando r+…

arq = open('C:\\Users\\John\\Desktop\\arquivo.txt', 'r+')
novo_valor = input("Digite o novo valor:")

def troca_Arroz(arq, novo_valor):
    ...
1 curtida