Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Usando método split para modificar um arquivo

Pessoal, Eu gostaria de usar o método split, para separar os campos de cada registro de um arquivo, modificar um dos campos e gravar o arquivo de saída, já com o campo modificado. Tentei com o código abaixo, mas o campo não se modificou. Acredito que a alteração (valores_sai[2] = cod_reg_sai) não refletiu na linha de saída (linha_sai). Alguém pode me ajudar a identificar o que deve ser feito?

arqent = open('RSK.txt', 'r')
arqsai = open('RSK_new.txt', 'w')
for linha in arqent:
    linha_sai = linha
    valores = linha.split('|')
    cod_reg = valores[2]
    cod_reg_sai = cod_reg[0:28] + '99'
    valores_sai[2] = cod_reg_sai
    arqsai.write(linha_sai)
arqent.close()
arqsai.close()
1 resposta
solução!

Olá Mário. Você está gravando exatamente a mesma linha que está lendo de arqent. Aparentemente você está se confundindo nas referências a objetos. Vamos lá:

Toda vez que manipulamos uma string no python, uma nova string é gerada. Isso porque este tipo objeto na linguagem é imutável. Portanto, o método split e os fatiamentos (cod_reg[0:28]) em strings sempre geram novos objetos (uma lista e uma string, respectivamente)

Então, quando seu programa chega na linha arqsai.write(linha_sai), a variável linha_sai, ainda referencia a string original (apontada também pela variável linha).

Como o valor atualizado do campo cod_reg (e os outros campos) estão na variável cod_reg_sai, que é uma lista, uma forma de você salvar os valores atualizados é unindo todos os campos com o separador original "|". Assim:

linha_sai = "|".join(valores_sai)
arqsai.write(linha_sai + "\n")