Dúvida sobre a codificação no PyCharm
Estava estudando como remover palavras em arquivos usando Python. Eu adicionava duas palavras no arquivo, uma normal e a outra rasurada. Antes de realizar a remoção, ao abrir o arquivo, as palavras ficavam normais, porém após a remoção da palavra não rasurada, ficava uma linha em branco e a palavra com rasura ficava bugada. Já mudei o código e a codificação do PyCharm várias vezes, mas continua assim. Alguém sabe o que devo fazer?
Essa foi minha última tentativa:
Essa foi minha última tentativa:
import codecs import unicodedata texto = "Rasurado" texto_normalizado = unicodedata.normalize(''NFKD'', texto) texto_riscado = ''.join([''\u0336{}''.format(c) for c in texto_normalizado]) with codecs.open("test.txt", "w", encoding="utf-8-sig") as texto_inicial: texto_inicial.write(texto_normalizado) with codecs.open("test.txt", "a", encoding="utf-8-sig") as texto_inicial: texto_inicial.write(f"\n") with codecs.open("test.txt", "r", encoding="utf-8-sig") as file: print(file.read()) with codecs.open("test.txt", "r+", encoding="utf-8-sig") as file: content = file.readlines() for line in range(len(content)): if texto_normalizado in content[line]: content[line] = content[line].replace(texto_normalizado, '') file.seek(0) file.write(''.join(content))
Ryan Santos
Curtidas 0
Respostas
Leticia Lima
26/03/2023
Eu acho que o problema pode ser no caractere de rasura ('\\u0336') no momento da escrita no seu arquivo, de como o PyCharm está interpretando esse caractere.
Aqui está uma alternativa de como eu tentaria resolver isso.
PS: já tentou usar outra IDE ?
Aqui está uma alternativa de como eu tentaria resolver isso.
PS: já tentou usar outra IDE ?
import codecs import unicodedata def rasurar_palavra(palavra): texto_normalizado = unicodedata.normalize('NFKD', palavra) texto_riscado = ''.join(['\\u0336{}'.format(c) for c in texto_normalizado]) return texto_normalizado, texto_riscado def remover_palavra_arquivo(nome_arquivo, palavra): texto_normalizado, texto_riscado = rasurar_palavra(palavra) # Escreve a palavra riscada no arquivo with codecs.open(nome_arquivo, "w", encoding="utf-8-sig") as arquivo: arquivo.write(texto_riscado) # Adiciona uma linha em branco with codecs.open(nome_arquivo, "a", encoding="utf-8-sig") as arquivo: arquivo.write("\\n") # Lê o conteúdo do arquivo with codecs.open(nome_arquivo, "r", encoding="utf-8-sig") as arquivo: print(arquivo.read()) # Remove a palavra não riscada do arquivo with codecs.open(nome_arquivo, "r+", encoding="utf-8-sig") as arquivo: content = arquivo.readlines() for line in range(len(content)): if texto_normalizado in content[line]: content[line] = content[line].replace(texto_normalizado, '') arquivo.seek(0) arquivo.write(''.join(content)) # Exemplo de uso remover_palavra_arquivo("test.txt", "Rasurado")
GOSTEI 0
Arthur Heinrich
26/03/2023
Acho que seu problema está nesse trecho de código
Se o "texto_normalizado" aparece na linha do arquivo, você está substituindo o conteúdo da linha, removendo o "texto_normalizado".
Imagine que sua linha contém o texto "picolé de morango" e o seu texto normalizado vale "morango". Como resultado sua linha vai aparecer como "picolé de ". Porém, se o texto normalizado coincide com a linha toda, a linha ficará em branco.
Se você quer que linhas em branco após a substituição sejam eliminadas, precisará excluí-las do arquivo. Algo como:
Lembrando que é um exemplo. Não conheço as funções e sintaxe da linguagem.
for line in range(len(content)): if texto_normalizado in content[line]: content[line] = content[line].replace(texto_normalizado, '')
Se o "texto_normalizado" aparece na linha do arquivo, você está substituindo o conteúdo da linha, removendo o "texto_normalizado".
Imagine que sua linha contém o texto "picolé de morango" e o seu texto normalizado vale "morango". Como resultado sua linha vai aparecer como "picolé de ". Porém, se o texto normalizado coincide com a linha toda, a linha ficará em branco.
Se você quer que linhas em branco após a substituição sejam eliminadas, precisará excluí-las do arquivo. Algo como:
for line in range(len(content)): if texto_normalizado in content[line]: content[line] = content[line].replace(texto_normalizado, '') if (content[line] == ''): content.delete(line)
Lembrando que é um exemplo. Não conheço as funções e sintaxe da linguagem.
GOSTEI 0